问题描述
写Java实体类遇到日期类型的往往要加上日期格式化注解,浪费不必要的时间还麻烦,总感觉不够优雅、体面
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date archiveTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime archiveTime;
解决方案:
Date类型的可以在yml中全局配置、指定的日期格式与类型
例如:
jackson:
default-property-inclusion: non_null
date-format: "yyyy-MM-dd HH:mm:ss"
time-zone: "GMT+8"
但是 jackson 不能改变Java 8 的日期类,例如LocalDateTime。此时我们可以创建配置类单独给LocalDateTime转换日期格式如下:
@Configuration
public class LocalDateTimeSerializerConfig {
@Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
private String pattern;
@Bean
public LocalDateTimeSerializer localDateTimeDeserializer() {
return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
}
}
后来在使用rabbitMq的过程中也遇到一个LocalDate序列化的错误: