代码先锋网 代码片段及技术文章聚合

Jackson 序列化跟反序列化

技术标签: Java开发各种工具  Java基础  Springboot  java

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的序列化跟反序列化了

版权声明:本文为weixin_35675281原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_35675281/article/details/106783072

智能推荐

Jackson 反序列化 MongoDB ObjectId

stackoverflow上的回答 项目中返回JSON时,mongo数据库中的id默认是ObjectId对象,但是我们要的却是.toString()字符串...

Jackson反序列化报错:UnrecognizedPropertyException

1.报错场景 UnrecognizedPropertyException是因为反序列化默认要求javaBean必须存在相应的字段。 2.解决办法 在JaveBean的类定义上加上注解...

jackson 2.9.9.3 反序列化bug

由于2.9.9.3以下版本出现了严重的安全漏洞,所以把项目jackson版本提升到了2.9.9.3… 之后测试突然说某某添加数据的接口报错…查看日志文件: 于是断点查看、各种参考文档、全网搜索都没找到问题,混沌之际,看到了"IO"关键字,突然脑中闪过一个是不是json解析出错了,顺手将jackson版本降了回去,果然问题不再了...

jackson 反序列化 LocalDateTime 异常

报错信息 原因 jackson 对 localDateTime 的序列化结果,并不是普通的字符串时间格式 解决方法 添加注解 @JsonDeserialize(using = LocalDateTimeDeserializer.class) @JsonSerialize(using = LocalDateTimeSerializer.class)...

jackson反序列化漏洞分析

jackson的基本使用 maven project依赖 jackson序列化 待序列化的对象 序列化 输出: 反序列化 输出: 总结: jackson的序列化、反序列化是根据get/set方法来读写对象的。 jackson enableDefaultTyping 待序列化对象 序列化: 输出: 反序列化 输出: 总结:enableDefaultTyping方法是对于JAVA_LANG_OBJEC...

猜你喜欢

Jackson 反序列化 — UnrecognizedPropertyException异常

概述: 出现这个异常的原因是JSON转Java对象的时候,JSON包含有Java对象没有的属性,所以无法识别该多余的属性。解决方案有3种。 方案一:单个Class配置 在对应Class上添加注解 @JsonIgnoreProperties(ignoreUnknown = true),忽略未知属性。 代码示例: 输出结果: 方案二:全局配置 使用mapper.configure(Deserializ...

jackson反序列化之HashMap

解决 这样可以将String对象转成map。 参考 Jackson对泛型的序列化和反序列化方法汇总...

Jackson反序列化多态处理

前言: 最近工作中需要将Prometheus的yml格式配置文件反序列化为Java实体,试了下Jackson就可以很完美的满足这个需求,正好Spring中自带Jackson,所以就用Jackson实现了。 正文: 在反序列化过程中碰到一个问题就是Prometheus的rule_files中的rules数组中的rule可以是RecordingRule也可以是AlertingRule,这个正好对应于J...

jackson 枚举 序列化和反序列

网上这类资料很少,自己总结一下:   jackson的枚举序列化 默认序列化为enum的name Event.GET_PASSWORD序列化为"GET_PASSWORD" 反序列化也一样,只有string为"GET_PASSWORD"才可以反序列化为Event.GET_PASSWORD   自定义序列化字段,通过@JsonValue注解,...

序列化工具-Jackson-序列化和反序列化用法

一、环境依赖: 二、序列化&反序列化:  ...