SpringMVC使用LocalDateTime、LocalDate作为入参的错误处理

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

项目当中采用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";
    /
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值