当前位置: 首页 > article >正文

SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter

SpringBoot解析Json格式数据

@ResponseBody

注:该注解表示前端请求后端controller,后端响应请求返回 json 格式数据前端,实质就是将java对象序列化

1.创建Controller

注:springboot默认就已经支持返回json格式数据,只需要加上@ResponseBody注解即可

    /**
     * 通过 @responsebody 注解返回 json 格式数据
     * @return
     */
    @RequestMapping("/getAll")
    @ResponseBody
    public List<User> getUsers(){
        ArrayList<User> users = new ArrayList<>();
        for(int i=0; i < 10 ; i++){
            User user = new User();
            user.setId(String.valueOf(i));
            user.setUsername("shanggushenlong>>>"+i);
            user.setAge(i);
            user.setBirthday(new Date());
            users.add(user);
        }
        return users;
    }
2.创建bean
public class User {
    private String id;
    private String username;
    private Integer age;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date birthday;

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", username='" + username + '\'' +
                ", age=" + age +
                ", birthday=" + birthday +
                '}';
    }
3.结果
在这里插入图片描述

@RequestBody

注:该注解表示前端发起请求时,要求请求体为 json 格式数据,实质就是反序列化到对应的对象中

1.创建controller
   /**
     * 前端传入json数据,后端以String字符串接收
     * @param userStr
     * @return
     */
    @RequestMapping("/setUser")
    @ResponseBody
    public String getUser(@RequestBody String userStr){
        System.out.println(userStr);
        return userStr.toString();
    }

    /**
     * 前端传入json,后端用 user 对象接收,@RequestBody 能够自动将前端传入的json与bean
     * 自动序列化对应成功一个实例对象
     * @param user
     * @return
     */
    @RequestMapping("/setUser2")
    @ResponseBody
    public String getUser2(@RequestBody User user){
        System.out.println(user);
        return user.toString();
    }
2.结果
  • 使用postman发起请求,需要在body中添加相应的请求体
  • 可能出现的问题:时间格式转换报错 ------ 解决方法,在 bean 实体类中对应的 birthday 字段添加注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    在这里插入图片描述

    在这里插入图片描述

HttpMessageConverter

springboot对于json默认支持的比较好,但是有时候需要自定义配置,比如上面的时间格式配置,假如你的项目有很多个bean,这个时候每一个bean去添加注解比较麻烦,这个时候就可以使用springboot提供的配置类,自己手动定义配置。

@Configuration
public class WebMvcConfig {

    @Bean
    MappingJackson2HttpMessageConverter MyHttpMessageConverter(){
        // 1.创建一个 Convert
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        // 2. 创建objectmapper
        ObjectMapper objectMapper = new ObjectMapper();
        // 配置时间格式
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));

        converter.setObjectMapper(objectMapper);
        return converter;
    }
}
  • 使用创建一个config类,使用 MappingJackson2HttpMessageConverter类,手动添加json相关的配置

  • 可能出现的问题:创建配置类,必须在类上添加注解 @Configuration,且在方法上加上 @Bean,只有这样配置才会生效。
    结果如下:

    在这里插入图片描述

    注:此处可能产生的问题是:配置类写了,没有达到预期的效果,可能是 bean 类中该字段注解没有去掉

  • json 格式数据在前后分离的时代,是非常重要的一种数据格式,因此HttpMessageConverter 也变的很重要,我们可以在此相关类中配置相应的规则

  • springboot提供的相关配置类 JacksonHttpMessageConvertersConfiguration MappingJackson2HttpMessageConverter

希望自己能一直保持初衷,文章一直写下去,和大家一起成长

本系列代码github地址:https://github.com/shanggushenlong/springboot-demo



喜欢的朋友记得点赞、收藏、关注哦!!!


http://www.kler.cn/news/310753.html

相关文章:

  • 利用echarts 显示图片信息
  • PathoDuet: HE 和 IHC 染色病理切片分析的基础模型|文献速递-Transformer架构在医学影像分析中的应用
  • PHP 环境搭建教程
  • Gin渲染
  • 变电站缺陷数据集8307张,带xml标注和txt标注,可以直接用于yolo训练
  • 基于深度学习的零售柜商品识别系统实战思路
  • 阅信云CTO向永清:35岁不应该成为技术职业发展的瓶颈|OceanBase 《DB大咖说》
  • Elasticsearch知识点整理
  • 【计算机毕业设计】医院电子病历
  • 线程池的执行流程
  • Java中的语法糖:让编程更简洁的特性
  • neo4j安装为服务+配置环境变量
  • linux之mysql安装
  • pip清华源地址
  • Vue 自定义指令实战
  • Vue 常见的几种通信方式(总结)
  • ShouldSniffAttr解说
  • Linux: debug:dump_stack 实例
  • 极狐GitLab 重要安全版本:17.3.3, 17.2.7, 17.1.8, 17.0.8, 16.11.10
  • C#使用HttpWebRequest下载文件
  • Java通信协议——UDP通信协议,模拟聊天室(完整详解,附有代码)
  • android含有EditText的键盘弹出后界面的正确处理
  • 人工智能 | 基于ChatGPT开发人工智能服务平台
  • 单片机嵌入式编程中常用技术点
  • Python基础 | 在虚拟环境中安装并在指定文件夹中打开Jupyter notebook
  • Java在零工市场中的应用:构建灵活高效的劳动力平台
  • 【算法】局部敏感哈希(LSH):高效解决相似性搜索问题的利器
  • html页面整合vue2或vue3
  • 选择适合你企业发展的服务器
  • 【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)