spring boot添加 LocalDateTime 等 java8 时间类序列化和反序列化的支持
生活随笔
收集整理的這篇文章主要介紹了
spring boot添加 LocalDateTime 等 java8 时间类序列化和反序列化的支持
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
由于項目將原有的??Date類型的字段改造為?LocalDate,LocalDateTime,LocalTime?類型, 發現 ?spring??對項目的時間格式無法自動轉換,故需手動配置下。
在spring boot? 中需在 ?maven?中引入??jsr-310? 的支持
<dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jsr310</artifactId></dependency>或者直接引用
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-json</artifactId> </dependency>因為??spring boot? 是使用 ?jackson?作為 ?json?序列化和反序列化工具的,故只需配置 ?jackson?即可。
/*** 發布時間*/@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updateDate;/*** 創建時間*/@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createDate;全局配置
配置如下:
@Configuration public class JacksonConfig {@Beanpublic ObjectMapper objectMapper(){ObjectMapper objectMapper = new ObjectMapper();objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);JavaTimeModule javaTimeModule = new JavaTimeModule();javaTimeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_TIME_FORMAT)));javaTimeModule.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_FORMAT)));javaTimeModule.addSerializer(LocalTime.class,new LocalTimeSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_TIME_FORMAT)));javaTimeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_TIME_FORMAT)));javaTimeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_FORMAT)));javaTimeModule.addDeserializer(LocalTime.class,new LocalTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_TIME_FORMAT)));objectMapper.registerModule(javaTimeModule).registerModule(new ParameterNamesModule());return objectMapper;}} public class Constants {/** 默認日期時間格式 */public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";/** 默認日期格式 */public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";/** 默認時間格式 */public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";}然后只需要在實體類中對應的時間類型上使用??@DateTimeFormat? 和??@JsonFormat? 即可。
單個ObjectMapper
jsonStr = new String(msg);ObjectMapper objectMapper = new ObjectMapper();objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);JavaTimeModule javaTimeModule = new JavaTimeModule();javaTimeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_TIME_FORMAT)));javaTimeModule.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_FORMAT)));javaTimeModule.addSerializer(LocalTime.class,new LocalTimeSerializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_TIME_FORMAT)));javaTimeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_TIME_FORMAT)));javaTimeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_DATE_FORMAT)));javaTimeModule.addDeserializer(LocalTime.class,new LocalTimeDeserializer(DateTimeFormatter.ofPattern(Constants.DEFAULT_TIME_FORMAT)));objectMapper.registerModule(javaTimeModule).registerModule(new ParameterNamesModule());ComponentPublishedMessage message = objectMapper.readValue(jsonStr, ComponentPublishedMessage.class);配置在屬性上
@DateTimeFormat(pattern = "yyyy-MM-dd\'T\'HH:mm:ss.SSS")@JsonDeserialize(using = LocalDateTimeDeserializer.class)@JsonSerialize(using = LocalDateTimeSerializer.class)@JsonFormat(pattern = "yyyy-MM-dd\'T\'HH:mm:ss.SSS")private LocalDateTime createDate;?
?
總結
以上是生活随笔為你收集整理的spring boot添加 LocalDateTime 等 java8 时间类序列化和反序列化的支持的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RabbitMQ开发详解
- 下一篇: Spring cloud集成Rabbit