Java 8之后,日期类的处理建议使用java.time包中对应的LocalDateTime, LocalDate, LocalTime类。(参考Java8新特性)
在Spring Boot中(验证版本:2.1.5.RELEASE),日期类的序列化格式可能不是自己所希望的,需要定义为自己的格式。有两种方式实现。
分别使用 @JsonFormat, @DateTimeFormat 来定义序列化(bean转json)与反序列(json转bean)时的格式,如
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime dateTime;
定义一个配置类,对ObjectMapper对象进行定制,指定日期类对应的序列化与反序列化处理对象,如
@Configuration public class LocalDateTimeFormatConfig { private static final String DEFAULT_DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; private static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd"; private static final String DEFAULT_TIME_PATTERN = "HH:mm:ss"; @Bean @Primary public ObjectMapper objectMapper(){ ObjectMapper objectMapper = new ObjectMapper(); JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN))); javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN))); javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN))); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_PATTERN))); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN))); javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN))); objectMapper.registerModule(javaTimeModule); return objectMapper; } }
注解的方式需要在每个属性上进行标注,如果日期类属性较多则较为繁琐,自定义配置类方式可以对日期进行统一的格式化处理。两者都存在的情况下,以注解为准,即注解方式会覆盖统一配置方式。
———————————————————————————————————————————————
欢迎关注我的微信公众号,及时获取最新分享