微人事第四天:Spring Boot默认的 JSON解决方案

现在我们想要在springboot项目中返回JSON数据到界面
1.创建springboot项目,只添加web
在这里插入图片描述
项目创建好之后我们打开maven依赖关系:
在这里插入图片描述
根据图片可以发现springboot帮我们自动创建好了json。

2.创建实体类User

package org.javaboy.json.bean;

public class User {
    private Integer id;
    private String name;
    private String address;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

3.创建控制类UserContoller

package org.javaboy.json.controller;

import org.javaboy.json.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

//@Controller
@RestController
public class UserContoller {

//    @ResponseBody
    @GetMapping("/user")
    public List<User> getAllUsr(){
        List<User> users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setAddress("www.javaboy.org>>" + i);
            user.setName("javaboy>>" + i);
            user.setId(i);
            users.add(user);
        }
        return users;
    }
}

上面的代码中使用到了@RestContoller注解。其实@RestController是由@Controller和@ResponseBody注解组成。@ResponseBody可以帮助我们返回Json数据。

4.启动项目
访问:http://localhost:8080/user
在这里插入图片描述
在项目中我么不仅要返回JSON还需要上传JSON,上传JSON的时候服务器可以把JSON反序列化成一个对象,用一个JSON对象来接收。不管是返回JSON还是上传JSON我们都需要用到HttpMessageConverter。

HttpMessageConverter简介

看名字就知道这是一个消息转换工具,有两方面的功能:
1.将服务端返回的对象序列化成JSON字符串(上面我们操作的就是这个)
2.将前端传来的JSON字符串反序列化成Java对象

所有的JSON生成都离不开相关的HttpMessageConverter

SpringMVC自动配置了Jackson和GSON的HttpMessageConverter,Springboot中又对此做了自动化配置:
1.JacksonHttpMessageConvertersConfiguration中对Jackson做了自动化配置
2.GsonHttpMessageConvertersConfiguration中对GSON做了自动化配置

所以,如果用户使用jackson和gson,没有其他额外配置,则只需要添加依赖即可。

现在在User实体类中添加属性:private Date birthday;
congtroller中也想要添加:user.setBirthday(new Date());

如果要对日期进行格式化,则需要写一个配置类

package org.javaboy.json.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.text.SimpleDateFormat;

@Configuration
public class WebMvcConfig {

//    @Bean
//    MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
//        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
//        ObjectMapper om = new ObjectMapper();
//        om.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
//        converter.setObjectMapper(om);
//        return converter;
//    }

    @Bean
    ObjectMapper objectMapper() {
        ObjectMapper om = new ObjectMapper();
        om.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
        return om;
    }
}

原理:在springboot中objectMapper()方法如果没有工程会帮我们自动配置(这个方法在JacksonAutoConfiguration类中有写),这里我们自己定义的就用自己的。

发布了287 篇原创文章 · 获赞 24 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41998938/article/details/103969230
今日推荐