项目当中采用LocalDateTime作为前端传入的时间类型,但是Spring接收到参数过后总是会报转换错误,原因是Spring通过反射实例化一个对象出来,然后再对对象中的各个参数进行convert,但是LocalDateTime、LocalDate类没有构造函数,无法反射实例化因此会报错,针对此错误进行了全局时间类型转换。
注:本文基于Springboot2.0测试,如果无法生效可能是spring版本较低导致的。
参数使用@RequestParam或者@PathVariable接收时
此时时间字符串作为普通请求参数传入,使用Convert进行时间类型转换
@Configuration
public class DateConfiguration {
@Bean
public Converter<String, LocalDate> localDateConverter() {
return new Converter<>() {
@Override
public LocalDate convert(String source) {
return LocalDate.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
}
};
}
@Bean
public Converter<String, LocalDateTime> localDateTimeConverter() {
return new Converter<>() {
@Override
public LocalDateTime convert(String source) {
return LocalDateTime.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
};
}
}
以上两个bean会注入到spring mvc的参数解析器(好像叫做ParameterConversionService),当传入的字符串要转为LocalDateTime类时,spring会调用该Converter对这个入参进行转换。
参数使用@RequestBody接收时
此时时间字符串时json字符串,因为前端json转后端pojo底层使用的是Json序列化Jackson工具(HttpMessgeConverter),要利用Jackson的json序列化和反序列化来做。
@Configuration
public class DateConfiguration {
/** 默认日期时间格式 */
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/

本文介绍如何在Spring项目中处理LocalDateTime、LocalDate等时间类型的参数转换,包括RequestParam、PathVariable和RequestBody的不同场景,通过配置Converter和ObjectMapper实现。
最低0.47元/天 解锁文章
427

被折叠的 条评论
为什么被折叠?



