Jackson 之 LocalDateTime 序列化与反序列化

您所在的位置:网站首页 objectmapper转list Jackson 之 LocalDateTime 序列化与反序列化

Jackson 之 LocalDateTime 序列化与反序列化

2024-02-26 14:41| 来源: 网络整理| 查看: 265

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言

在 Java 8 中对 LocalDateTime、LocalDate 的序列化和反序列化有很多种操作

全局

在 ObjectMapper 对象中配置 JavaTimeModule,此为全局配置。

@Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); // other serializer and deSerializer config ... JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); objectMapper.registerModule(javaTimeModule); return objectMapper; }

DateTimeFormatter.ofPattern 可以设置不同的时间日期模板,来实现不同的效果

局部 使用 @JsonFormat 注解

pattern 可以配置不同的时间格式模板

@Data public static class Article { @JsonFormat(pattern = "yyyy-MM-dd") private LocalDateTime date; } Serializer 和 DeSerializer

Jackson 提供了默认的 LocalDate 和 LocalDateTime 的 Serializer 和 DeSerializer,不过需要引入额外的 maven 依赖

com.fasterxml.jackson.datatype jackson-datatype-joda 2.9.5 @Data public static class Article { @JsonSerialize(using = LocalDateSerializer.class) @JsonDeserialize(using = LocalDateDeserializer.class) private LocalDateTime date; }

与此同时,还可以自定义 Serializer 和 DeSerializer,以满足某些独特场景中的时间日期格式。 比如对任意格式的时间同一反序列化为标准的 LocalDateTime 对象。

public class LocalDateTimeDeserializer extends JsonDeserializer { @Override public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { return this.deserialize(p.getText().trim()); } private LocalDateTime deserialize(String source) { if (StringUtils.isBlank(source)) { return null; } else if (source.matches("^\\d{4}-\\d{1,2}$")) { // yyyy-MM return LocalDateTime.parse(source + "-01T00:00:00.000", DateTimeFormatter.ISO_LOCAL_DATE_TIME); } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}T{1}\\d{1,2}")) { // yyyy-MM-ddTHH return LocalDateTime.parse(source + ":00:00.000", DateTimeFormatter.ISO_LOCAL_DATE_TIME); } else { // yyyy-MM-ddTHH:mm:ss.SSS return LocalDateTime.parse(source, DateTimeFormatter.ISO_LOCAL_DATE_TIME); } } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3