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

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


相关文章
|
消息中间件 Java Maven
一文搞懂Spring Boot整合RocketMQ
一文搞懂Spring Boot整合RocketMQ
609 0
|
消息中间件 存储 缓存
3分钟白话RocketMQ系列—— 如何消费消息
3分钟白话RocketMQ系列—— 如何消费消息
1470 0
|
SpringCloudAlibaba 安全 Java
SpringCloud版本升级后bootstrap.yml配置不生效
SpringCloud版本升级后bootstrap.yml配置不生效
2827 1
|
应用服务中间件 nginx
Nginx的启动、停止与重启
启动  启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.
14301 0
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
14241 60
|
Arthas 监控 数据可视化
jvm性能调优实战 - 61常用的JVM调优网站
jvm性能调优实战 - 61常用的JVM调优网站
820 0
|
Java 数据库连接 Maven
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
自动装配是现在面试中常考的一道面试题。本文基于最新的 SpringBoot 3.3.3 版本的源码来分析自动装配的原理,并在文未说明了SpringBoot2和SpringBoot3的自动装配源码中区别,以及面试回答的拿分核心话术。
1099 2
最新版 | 深入剖析SpringBoot3源码——分析自动装配原理(面试常考)
|
数据库 Java 数据库连接
玩转Play Framework的秘密武器:Ebean ORM带你解锁高效数据库操作新姿势,让你的代码从此飞起来!
【8月更文挑战第31天】Play Framework 以其简洁的 API 和高效开发体验著称,Ebean ORM 则是其推荐的对象关系映射(ORM)工具之一。Ebean 可将 Java 对象轻松映射到数据库表,简化数据库交互。本文将指导你在 Play Framework 中使用 Ebean ORM 进行数据库操作,涵盖项目创建、依赖引入、数据库配置、模型定义及 CRUD 操作,并通过示例代码展示实现过程。通过这些步骤,你将学会如何利用 Ebean 的丰富功能,如事务管理、查询构建等,提升 Web 应用的数据库交互能力。
362 0
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
1066 8
|
JSON 缓存 Java
优雅至极!Spring Boot 3.3 中 ObjectMapper 的最佳实践
【10月更文挑战第5天】在Spring Boot的开发中,ObjectMapper作为Jackson框架的核心组件,扮演着处理JSON格式数据的核心角色。它不仅能够将Java对象与JSON字符串进行相互转换,还支持复杂的Java类型,如泛型、嵌套对象、集合等。在Spring Boot 3.3中,通过优雅地配置和使用ObjectMapper,我们可以更加高效地处理JSON数据,提升开发效率和代码质量。本文将从ObjectMapper的基本功能、配置方法、最佳实践以及性能优化等方面进行详细探讨。
1264 2

热门文章

最新文章