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[])序列化为字符串形式。
建议收藏,以备不时之需!