springboot请求入参LocalDate LocalDateTime解析

        springboot默认不支持请求参数解析为jdk1.8中日期时间类型,下面提供两种方式解析实现请求入参解析为LocalDate、LocalDateTime 、LocalTime等。

方式一:全局配置

        通过以下配置可以对所有请求入参LocalDate、LocalDateTime 、LocalTime类型做统一的格式转换。

    private LocalDateTimeSerializer localDateTimeSerializer() {
            return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DateFormatConstant.DATE_TIME_FORMAT_1));
    }
    private LocalDateTimeDeserializer localDateTimeDeserializer() {
        return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DateFormatConstant.DATE_TIME_FORMAT_1));
    }

    private LocalDateSerializer localDateSerializer() {
        return new LocalDateSerializer(DateTimeFormatter.ofPattern(DateFormatConstant.DATE_FORMAT_3));
    }
    private LocalDateDeserializer localDateDeserializer() {
        return new LocalDateDeserializer(DateTimeFormatter.ofPattern(DateFormatConstant.DATE_FORMAT_3));
    }

    private LocalTimeSerializer localTimeSerializer() {
        return new LocalTimeSerializer(DateTimeFormatter.ofPattern(DateFormatConstant.TIME_FORMAT_1));
    }
    private LocalTimeDeserializer localTimeDeserializer() {
        return new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DateFormatConstant.TIME_FORMAT_1));
    }
    
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> {
            builder.serializerByType(LocalDateTime.class, localDateTimeSerializer());
            builder.deserializerByType(LocalDateTime.class, localDateTimeDeserializer());
            builder.serializerByType(LocalDate.class, localDateSerializer());
            builder.deserializerByType(LocalDate.class, localDateDeserializer());
            builder.serializerByType(LocalTime.class, localTimeSerializer());
            builder.deserializerByType(LocalTime.class, localTimeDeserializer());
        };
    }

方式二:局部设置一

        在属性上添加JsonFormat注解,实现对属性解析的精确配置。

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateFormatConstant.DATE_FORMAT_2)
private LocalDate date;

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateFormatConstant.DATE_TIME_FORMAT_1)
private LocalDateTime dateTime;

        或使用JsonFormat注解与JsonDeserialize及JsonSerialize注解配合,指定相应的解析类。

@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
@JsonFormat(pattern = DateFormatConstant.DATE_FORMAT_5)
private LocalDate date;

@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(pattern = DateFormatConstant.DATE_TIME_FORMAT_1)
private LocalDateTime dateTime;

总结:

        在项目中可使用上述两种方式配合,使用方式一全局设置,方式二针对特殊请求参数进行处理,来实现对LocalDate、LocalDateTime 、LocalTime类型的转换。

        对于需要使用ObjectMapper对某些对象进行json转换时,可以使用IOC对象,此时上述注解依然有效。

@Autowired
private ObjectMapper objectMapper;

        或使用如下方式获取ObjectMapper对象:

@Bean
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer) {
    Jackson2ObjectMapperBuilder jsonBuilder = Jackson2ObjectMapperBuilder.json();
    jackson2ObjectMapperBuilderCustomizer.customize(jsonBuilder);
    return jsonBuilder.build();

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值