SpringMVC处理Java8新日期类参数
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; }
在Spring Boot 2.0之后,将默认依赖
spring-boot-starter-json
包,该依赖包括了jackson-datatype-jsr310
在内的3种json实用工具包,因此不需要再手动添加依赖
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)