Jackson 序列化跟反序列化

Jackson是一款强大的JSON处理库,广泛应用于SpringBoot项目中。本文介绍了如何配置Jackson进行序列化和反序列化,并特别讨论了Java8 LocalDateTime的自定义序列化和反序列化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Jackson是一个款非常优秀的Json序列化跟反序列化的工具,Springboot默认的就是使用此对Json进行序列化跟反序列化的。

咋们工作中,常见的一些配置

  private static ObjectMapper objectMapper = new ObjectMapper();

  static {
    // 格式化输出
//    objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
    // 对于未知的属性抛出异常
    objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    // 反序列化的时候,针对对象,如果是字段为"",则不抛出异常,转为null
    objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
    // 反序列化的时候,如果未知枚举,转为NULL
    objectMapper.enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL);
    // 反序列化的时候,如果未知枚举,转为默认的枚举,需要在默认的枚举上面添加 @JsonEnumDefaultValue 标识
    objectMapper.enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE);
    // 自定义序列化
    {
      JavaTimeModule javaTimeModule = new JavaTimeModule();
      javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer());
      javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
      objectMapper.registerModule(javaTimeModule);
    }
  }

作为一个全局的工具使用

对于某些类型需要自定义的序列化跟反序列化的话,可以参考 LocalDateTimeDeserializer 跟 LocalDateTimeSerializer,如下

//字符串的日期反序列化时间
public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
    @Override
    public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException{
        DateTimeFormatter dateTimeFormatter =  DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String dateTimeStr = jsonParser.getValueAsString();
        return  LocalDateTime.parse(dateTimeStr,dateTimeFormatter);
    }
}

序列化:


//时间序列化时变为Str
public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
    @Override
    public void serialize(LocalDateTime localDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws
        IOException {
        DateTimeFormatter dateTimeFormatter =  DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        jsonGenerator.writeString(dateTimeFormatter.format(localDateTime));
    }
}

这个例子就完成了Java8的LocalDateTime的序列化跟反序列化了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值