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

简介: 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[])序列化为字符串形式。

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


相关文章
|
SpringCloudAlibaba 安全 Java
SpringCloud版本升级后bootstrap.yml配置不生效
SpringCloud版本升级后bootstrap.yml配置不生效
2312 1
|
关系型数据库 数据库 数据安全/隐私保护
Docker-10:Docker安装PostgreSQL
通过容器化Docker 安装 postgrel
5701 0
Docker-10:Docker安装PostgreSQL
|
SQL 分布式计算 算法
Hive关联时丢失数据问题和常用的Hive SQL参数设置
针对结果的发生,本文从以下方面分析原因及提供解决方案: - 右表没有匹配的数据 - 关联键数据类型不匹配 - 受count列null值影响 - Hive版本问题,在某些版本中,左连可能导致右表为null - 数据倾斜 并在文末附属了`Hive SQL常用参数设置`的说明。
Hive关联时丢失数据问题和常用的Hive SQL参数设置
JeecgBoot 短信验证码接口,如何实现防刷机制?
短信接口防刷,主要通过两个方面来实现:一个是短信接口加签和时间戳;另外针对短信接口,增加防刷 check 机制
280 1
|
消息中间件 Java Kafka
skywalking日志收集
skywalking日志收集
skywalking日志收集
|
11月前
|
SQL Rust Java
Java 8 异步编程利器:CompletableFuture
Java 8引入了CompletableFuture,这是一个强大的异步编程工具,增强了Future的功能,支持链式调用、任务组合与异常处理等特性,使异步编程更加直观和高效。本文详细介绍了CompletableFuture的基本概念、用法及高级功能,帮助开发者更好地掌握这一工具。
186 0
|
消息中间件 监控 关系型数据库
实时计算 Flink版产品使用问题之运行后,怎么进行监控和报警
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL 关系型数据库 MySQL
解决:Mybatis-plus向数据库插入数据的时候 报You have an error in your SQL syntax
该博客文章讨论了在使用Mybatis-Plus向数据库插入数据时遇到的一个常见问题:SQL语法错误。作者发现错误是由于数据库字段中使用了MySQL的关键字,导致SQL语句执行失败。解决方法是将这些关键字替换为其他字段名称,以避免语法错误。文章通过截图展示了具体的操作步骤。
|
JavaScript
Vue进阶篇(二)-彻底改变 Vue.js 状态管理:深入探讨Vue 3 Setup中的DefineModel
Vue进阶篇(二)-彻底改变 Vue.js 状态管理:深入探讨Vue 3 Setup中的DefineModel
|
安全 JavaScript 前端开发
Nginx服务扫描漏洞修复
Nginx服务扫描漏洞修复