Spring Boot 默认提供了与三个 JSON 库的集成:
GSON
Jackson
JSON-B
注意:Jackson 是 Spring Boot 首选的默认库。
提供了 Jackson 的自动配置,Jackson 是 spring-boot-starter-json 的一部分。当 Jackson 在类路径上时,会自动配置 ObjectMapper bean。提供了几个配置属性来自定义 ObjectMapper 的配置。
SpringBoot 项目中当我们添加了 spring-boot-starter-web 依赖,就默认提供了 Jackson用来解析Json。依赖如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
如下图:
(1)定义实体 User,代码如下:
import lombok.Builder; import lombok.Data; import java.util.Date; @Data @Builder public class User { private int id; private String name; private Integer age; private Date birthday; }
(2)定义 controller,代码如下:
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; @RestController @RequestMapping("/demo1") public class DemoController { @RequestMapping("/demo") public User demo() { return User.builder().id(100) .name("张三") .age(29) .birthday(new Date()) .build(); } }
访问“/demo1/demo”接口将输出如下 JSON 字符串:
{"id":100,"name":"张三","age":29,"birthday":"2021-04-22T14:57:24.124+00:00"}
我们可以对 Date 类型字段进行自定义格式,在属性上添加 @JsonFormat 注解可以实现:
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date birthday;
接口输出JSON字符串:
{"id":100,"name":"张三","age":29,"birthday":"2021-04-22 15:04:36"}
提供了 Gson 的自动配置。当 Gson 在类路径上时,会自动配置 Gson bean。提供了几个 spring.gson.* 配置属性来自定义配置。为了获得更多控制,可以使用一个或多个 GsonBuilderCustomizer beans。
提供了 JSON-B 的自动配置。当 JSON-B API 和实现在类路径上时,将自动配置 Jsonb bean。首选的 JSON-B 实现是 Apache Johnzon,它提供了依赖关系管理。