Spring Boot

使用 @DateTimeFormat 可以对非 Json (即未被 @RequestBody 修饰的)参数进行反序列化,该注解由 Spring Boot 提供,与序列化工具无关。
而需要处理 Json 参数时,则必须借助 Json 序列化框架来实现。

Jackson

Jackson 提供了 @JsonFormat 注解,同时用于日期的(反)序列化。但是默认情况下,并不支持 Jsr310 新增的、即 java 8 时间类,如 LocalDate。
需要添加依赖(默认继承 Jackson 提供的版本号即可):

1
2
3
4
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

此时,Spring Boot 将自动完成注册。
但是,若在项目中手动新建了 Jackson 处理器,或者重新注册了 ObjectMapper Bean,则需要在注册时,修改配置以添加支持:

1
2
3
4
5
6
7
8
9
10
11
// 通常时在 web 配置中重新消息响应器
public class WebConfig extends WebMvcConfigurerAdapter {

public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// ...
ObjectMapper objectMapper = new ObjectMapper();
// 注册时间模块
objectMapper.registerModule(new JavaTimeModule());
}
}

评论