SpringMVC如何将request参数自动封装为LocalDate和LocalDateTime
在使用SpringMVC时,java.util.Date类型字段可以使用@DateTimeFormat注解将application/x-www-from-urlencoded类型的请求中的字符串进行自动转换。而Java 8中新的时间类型该如何支持呢?
在application/x-www-from-urlencoded(键值对)请求中自动转换新时间类型
从Spring4.0开始,Spring的context模块包中增加了Jsr310DateTimeFormatAnnotationFormatterFactory工厂类。该类是对@DateTimeFormat注解的JSR310标准扩展支持。因此,在Spring4.0之后,可以直接使用@DateTimeFormat注解标注LocalDate等新时间类型字段,从而实现时间格式字符串到新时间类型的自动转换。
如:
public class SimpleRequest { private Integer id; @DateTimeFormat(iso = ISO.DATE) private LocalDate startDate; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime startTime; }
在JSON请求中支持新时间类型的转换
如果请求的格式为application/json,则@DateTimeFormat注解将不再生效,取而代之的是Spring默认使用Jackson作为json的序列化工具,因此需要增加Jackson对新时间类型的反序列化器(Deserializer)来支持新时间类型的转换。
而Jackson官方已经提供了对JSR310标准的支持包,只需在pom文件中添加以下配置引入依赖(版本自选):
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.9.3</version> </dependency>
然后在需要反序列化(序列化)的对象字段上添加@JsonDeserialize(using = LocalDateDeserializer.class)(@JsonSerialize(using = LocalDateSerializer.class))注解,Jackson便会使用该反序列化器将json字段反序列化成LocalDate类型。
如:
public class SimpleRequest { private Integer id; @JsonDeserialize(using = LocalDateDeserializer.class) @JsonSerialize(using = LocalDateSerializer.class) private LocalDate startDate; @JsonDeserialize(using = LocalDateTimeDeserializer.class) @JsonSerialize(using = LocalDateTimeSerializer.class) private LocalDateTime startTime; }
转自:简书-小花的胖次 标签:SpringMVC,json,private,class,日期,DateTimeFormat,using,序列化,Java8 From: https://www.cnblogs.com/giaogiaoyang/p/17920802.html在Spring Boot 2.0之后,将默认依赖
spring-boot-starter-json
包,该依赖包括了jackson-datatype-jsr310
在内的3种json实用工具包,因此不需要再手动添加依赖