Spring Boot 自定义Jackson ObjectMapper,你学会了吗?
在Spring Boot Web 项目中,当使用JSON格式接收数据和返回数据的时候,Spring Boot 默认使用一个ObjectMapper实例来序列化响应和反序列化请求。
在本文中,我们将看看配置序列化和反序列化选项的最常用方法。
默认配置
默认情况下,Spring Boot的配置将禁用以下配置项。
MapperFeature.DEFAULT_VIEW_INCLUSIONDeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIESSerializationFeature.WRITE_DATES_AS_TIMESTAMPS。
举个例子
客户端将发送一个GET请求到我们的/coffee?name=Javazzz。控制器将返回一个新的Coffee对象。Spring将使用ObjectMapper将我们的POJO序列化为JSON。
我们将通过使用String和LocalDateTime对象来示范定制选项。
public class Coffee {
private String name;
private String brand;
private LocalDateTime date;
//getter and setter
}
我们还将定义一个简单的REST控制器来演示序列化。
@GetMapping("/coffee")
public Coffee getCoffee(
@RequestParam(required = false) String brand,
@RequestParam(required = false) String name) {
return new Coffee()
.setBrand(brand)
.setDate(FIXED_DATE)
.setName(name);
}
默认情况下,这将是调用GET http://lolcahost:8080/coffee?brand=javazzz 时的响应。
{
"name": null,
"brand": "javazzz",
"date": "2022-06-16T10:21:35.974"
}
我们希望排除空值,并有一个自定义的日期格式(dd-MM-yyyy HH:mm)。这就是我们的响应结果。
{
"brand": "javazzz",
"date": "06-11-2022 10:34"
}
在使用Spring Boot时,我们可以选择定制默认的ObjectMapper或覆盖它。我们将在接下来的章节中介绍这两个选项。
自定义默认的ObjectMapper
在本节中,我们将看到如何定制Spring Boot使用的默认ObjectMapper。
1.应用程序属性和自定义 Jackson 模块
配置映射器的最简单方法是通过应用程序属性。
下面是配置的一般结构。
spring.jackson.