springboot jackson配置LocalDate解析方式

SpringBoot默认使用的是Jackson来完成JSON到对象的相互转换。
对于一些Jackson不支持的数据类型,需要我们来指定转换规则,例如如何实现LocalDate与String的相互转换。

@Configuration
public class JacksonConfig {
    // LocalDatetime类型格式化规则
    @Value("${cpw.system.date.datetime-format-pattern:yyyy-MM-dd HH:mm:ss}")
    private String dateTimeFormatPattern;

    // LocalDate类型格式化规则
    @Value("${cpw.system.date.date-format-pattern:yyyy-MM-dd}")
    private String dateFormatPattern;


    /**
     * LocalDateTime序列化器
     */
    public LocalDateTimeSerializer localDateTimeSerializer() {
        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormatPattern));
    }

    /**
     * LocalDateTime反序列化器
     */
    public LocalDateTimeDeserializer localDateTimeDeserializer() {
        return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(dateTimeFormatPattern));
    }

    public LocalDateSerializer localDateSerializer() {
        return new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormatPattern));
    }

    public LocalDateDeserializer localDateDeserializer() {
        return new LocalDateDeserializer(DateTimeFormatter.ofPattern(dateFormatPattern));
    }

    /**
     * 返回值类型格式化
     * 配置序列化器与反序列化器
     * 序列化器    --> 用户将对象转为字符串
     * 反序列化器  --> 用于将字符串转为对象
     */
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer customizer() {
        return builder -> builder
                .serializerByType(LocalDate.class, localDateSerializer())
                .serializerByType(LocalDateTime.class, localDateTimeSerializer())
                .deserializerByType(LocalDateTime.class, localDateTimeDeserializer())
                .deserializerByType(LocalDate.class, localDateDeserializer());
    }

}
posted @ 2023-03-17 14:53  INEEDSSD  阅读(292)  评论(0编辑  收藏  举报