前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jackson行为特征SerializationFeature和DeserializationFeature【收藏】

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

作者头像
码到三十五
修改2024-03-21 08:57:03
750
修改2024-03-21 08:57:03
举报
文章被收录于专栏:JAVA核心JAVA核心

1️⃣ 前言

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

代码语言:javascript
复制
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[])序列化为字符串形式。

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


术因分享而日新,每获新知,喜溢心扉。 诚邀关注公众号 码到三十五 ,获取更多技术资料。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1️⃣ 前言
  • 2️⃣DeserializationFeature 枚举类的枚举值
  • 3️⃣ SerializationFeature 枚举类枚举值
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档