Jackson行为特征SerializationFeature和DeserializationFeature【收藏】

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: Jackson行为特征SerializationFeature和DeserializationFeature【收藏】

1️⃣ 前言

在使用Jackson序列化和反序列化的时候,一般会设置一些相关特性,例如下面这样的代码:

ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.enableDefaultTyping(DefaultTyping.NON_FINAL);
    objectMapper.setVisibility(PropertyAccessor.ALL, Visibility.ANY);
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

Jackson 库中,SerializationFeature 和 DeserializationFeature 是用于配置序列化和反序列化行为的枚举类。它们分别用于控制对象的序列化和反序列化过程中的各种特性和选项,通过在序列化和反序列化过程中配置这些特性,可以灵活控制 JSON 数据的解析和生成方式。


下面就详细的解释这些特性的具体含义,注jackson版本2.10.2

2️⃣DeserializationFeature 枚举类的枚举值

  • 1、 ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT:允许将空数组([])反序列化为 null 对象。当遇到空数组时,解析为 null。
  • 2、 ACCEPT_EMPTY_STRING_AS_NULL_OBJECT:允许将空字符串反序列化为 null 对象。当遇到空字符串时,解析为 null。
  • 3 、ACCEPT_FLOAT_AS_INT:允许将浮点数作为整数进行反序列化。当遇到浮点数时,如果它表示一个整数,则解析为整数。
  • 4 、ACCEPT_SINGLE_VALUE_AS_ARRAY:允许将单一值反序列化为数组。当遇到单一值时,将其解析为只包含该值的数组。
  • 5 、FAIL_ON_READING_DUP_TREE_KEY:在读取重复的树节点键时抛出异常。用于确保树形结构中每个键都是唯一的。
  • 6、 FAIL_ON_UNKNOWN_PROPERTIES:在遇到未知属性时抛出异常。用于强制要求所有属性都应在对象定义中有对应的字段或 setter 方法。
  • 7 、FAIL_ON_MISSING_CREATOR_PROPERTIES:在缺少构造器参数时抛出异常。用于确保所有构造器参数都能被正确初始化。
  • 8 、FAIL_ON_NULL_CREATOR_PROPERTIES:在构造器参数为 null 时抛出异常。用于确保构造器参数不为 null。
  • 9 、FAIL_ON_IGNORED_PROPERTIES:在忽略属性时抛出异常。用于检测是否有未处理的属性。
  • 10 、FAIL_ON_INVALID_SUBTYPE:在找不到合适的子类型时抛出异常。用于确保在反序列化时能够正确匹配子类型。
  • 11、 FAIL_ON_NULL_FOR_PRIMITIVES:在原始类型的属性为 null 时抛出异常。用于确保原始类型不为 null。
  • 12、 FAIL_ON_NUMBERS_FOR_ENUMS:在枚举类型的属性为数值类型(如整数)时抛出异常。用于确保枚举类型的属性只能是字符串类型。
  • 13、 ACCEPT_EMPTY_OBJECT_AS_NULL:允许将空对象({})反序列化为 null 对象。当遇到空对象时,解析为 null。
  • 14 、UNWRAP_SINGLE_VALUE_ARRAYS:允许在反序列化数组时解包单个元素。当数组仅包含一个元素时,返回该元素而不是数组。
  • 15、 UNWRAP_ROOT_VALUE:允许解包根对象,将根对象的属性直接提取为反序列化的结果。
  • 16 、WRAP_EXCEPTIONS:将解析过程中发生的异常封装为 Jackson 运行时异常,而不是普通的 IOException。

3️⃣ SerializationFeature 枚举类枚举值

  • 1、 INDENT_OUTPUT:以缩进的方式输出 JSON 数据,使其更易读。
  • 2 、WRAP_ROOT_VALUE:在序列化时,将根对象包装在一个属性中。可以通过 JsonGenerator 的 setRootValueSeparator 方法设置属性名称,默认为 $ 符号。
  • 3、 INDENT_ARRAYS:在序列化数组时进行缩进,提高可读性。
  • 4 、INDENT_OBJECTS:在序列化对象时进行缩进,提高可读性。
  • 5、 SORT_PROPERTIES_ALPHABETICALLY:按字母顺序对属性进行排序,以确保输出的属性顺序一致。
  • 6 、WRITE_NULL_PROPERTIES:在序列化过程中,包括空值的属性也进行输出。
  • 7、 WRITE_EMPTY_JSON_ARRAYS:在序列化空集合(List、Set)时,输出一个空的 JSON 数组([])。
  • 8、 WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED:当数组仅包含一个元素时,不使用数组格式进行输出,而直接输出单个元素。
  • 9 、WRITE_ENUMS_USING_TO_STRING:对枚举类型进行序列化时,使用 toString() 方法获取枚举值的字符串形式。
  • 10、 WRITE_ENUM_KEYS_USING_INDEX:对枚举类型的键进行序列化时,使用枚举值的索引而不是名称。
  • 11、 WRITE_ENUMS_USING_INDEX:对枚举类型进行序列化时,使用枚举值的索引而不是名称。
  • 12、 WRITE_BIGDECIMAL_AS_PLAIN:将 BigDecimal 类型的数据序列化为普通数字形式,而不是科学计数法。
  • 13、 WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS:将日期时间戳写入输出时,以纳秒精度表示。
  • 14、 WRITE_DATES_AS_TIMESTAMPS:将日期序列化为时间戳形式,即一个长整型数字。
  • 15、 WRITE_EMPTY_JSON_OBJECTS:在序列化空对象时,输出一个空的 JSON 对象({})。
  • 16、 WRITE_DATE_KEYS_AS_TIMESTAMPS:将日期类型的键序列化为时间戳形式。
  • 17、 WRITE_SINGLE_ELEM_ARRAYS_WRAPPED:当数组仅包含一个元素时,使用数组格式进行输出,以保持输出的一致性。
  • 18、 WRITE_NULL_MAP_VALUES:在序列化过程中,包括空值的 Map 的键值对也进行输出。
  • 19、 WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS:将字符数组(char[])序列化为 JSON 数组。
  • 20、 WRITE_CHAR_ARRAYS_AS_JSON_STRINGS:将字符数组(char[])序列化为字符串形式。

建议收藏,以备不时之需!


相关文章
|
JSON 安全 Java
jackson学习之二:jackson-core
了解jackson最底层的功能逻辑
215 0
jackson学习之二:jackson-core
|
XML JSON 数据中心
目标检测VOC数据集标注XML文件转EasyDL数据集标注Json格式
目标检测VOC数据集标注XML文件转EasyDL数据集标注Json格式
目标检测VOC数据集标注XML文件转EasyDL数据集标注Json格式
|
3月前
|
JSON 安全 Java
深入解析Jackson的ObjectMapper:核心功能与方法指南
深入解析Jackson的ObjectMapper:核心功能与方法指南
|
XML JSON Java
jackson学习之一:基本信息
对jackson有个基本了解
110 2
jackson学习之一:基本信息
|
JSON 前端开发 Java
Jackson使用详解
Spring MVC 默认采用Jackson解析Json,尽管还有一些其它同样优秀的json解析工具,例如Fast Json、GSON,但是出于最小依赖的考虑,也许Json解析第一选择就应该是Jackson。
924 0
Jackson使用详解
|
存储 JSON Java
Json \ Jackson \ ObjectMapper 的关系,Java对象和Json对象的相互转化
Json \ Jackson \ ObjectMapper 的关系,Java对象和Json对象的相互转化
116 0
|
JSON Java fastjson
Jackson 使用
老版本的 Jackson 使用的包名为 org.codehaus.jackson,而新版本使用的是com.fasterxml.jackson。 Jackson主要包含了3个模块: • jackson-core • jackson-annotations • jackson-databind 其中,jackson-databind 又依赖于 jackson-annotations。jackson-annotations 又依赖于 jackson-core,
487 0
|
JSON 安全 IDE
用了几年的 Fastjson,我最终替换成了Jackson!
为什么要替换fastjson 工程里大量使用了fastjson作为序列化和反序列化框架,甚至ORM在处理部分字段也依赖fastjson进行序列化和反序列化。那么作为大量使用的基础框架,为什么还要进行替换呢?
1431 0
用了几年的 Fastjson,我最终替换成了Jackson!
|
消息中间件 JSON 数据格式
JsonUtil(基于Jackson的实现)
JsonUtil(基于Jackson的实现)前言:其实,我一直想写一个有关Util的系列。 其中有四个原因: Util包作为项目的重要组成,是几乎每个项目不可或缺的一部分。并且Util包的Util往往具有足够的通用性,可用于不同的项目。
2061 0