当前位置: 首页 > news >正文

第6篇:`ObjectMapper`深度配置:全局行为定制

在前面的博文中,我们通过注解驱动(如@JsonProperty@JsonFormat)解决了JSON序列化/反序列化的局部需求——但当项目规模扩大(比如有上百个实体类),注解的局限性会逐渐凸显:

  • 重复劳动:每个日期字段都要加@JsonFormat,每个驼峰字段都要加@JsonProperty转下划线;
  • 规则混乱:不同开发者可能用不同注解(比如有的用@JsonInclude,有的手动过滤空值),导致JSON格式不统一;
  • 维护成本高:若需修改规则(比如日期格式从yyyy-MM-dd改为yyyy/MM/dd),需逐个修改所有注解。

而Jackson的核心类ObjectMapper,提供了全局配置能力——只需一次配置,就能统一项目所有JSON处理规则,彻底解决上述问题。本文将聚焦ObjectMapper的四大核心全局配置,带你实现“一处配置,全域生效”。

一、前置知识:ObjectMapper与配置的关系

ObjectMapper是Jackson的“核心引擎”,负责JSON与Java对象的转换。它的配置体系主要分为两类:

  1. 特征配置:通过SerializationFeature(序列化特征)和DeserializationFeature(反序列化特征)控制行为(如是否格式化、是否忽略未知字段);
  2. 策略配置:通过setPropertyNamingStrategy(命名策略)、setDateFormat(日期格式)等配置全局规则。

所有配置只需在ObjectMapper实例化时设置一次,后续通过该实例进行的所有JSON操作都会遵循这些规则。在Spring项目中,可通过注入全局ObjectMapper Bean,让所有@RestControllerRestTemplate自动复用配置。

二、核心配置1:序列化全局规则(SerializationFeature

SerializationFeature包含数十个序列化相关的开关,用于控制JSON输出的格式和内容。以下是项目中最常用的5个配置,覆盖90%的序列化场景。

1. 常用配置项解析

配置项 作用 默认值 适用场景
INDENT_OUTPUT 是否格式化输出JSON(换行、缩进) false(紧凑格式) 测试/开发环境便于调试;生产环境建议关闭(减少传输体积)
WRITE_EMPTY_JSON_ARRAYS 空集合(如new ArrayList<>())是否序列化 true(输出空数组[] 生产环境建议关闭,避免返回"list":[]这类冗余数据
WRITE_NULL_MAP_VALUES Map中的null值是否序列化 true(输出"key":null 全局过滤null值,替代@JsonInclude(Include.NON_NULL)
WRITE_ENUMS_USING_TO_STRING 枚举序列化时,使用toString()结果还是枚举名 false(用枚举名,如MALE 若枚举重写了toString()(如返回中文“男”),需开启此配置
FAIL_ON_EMPTY_BEANS 序列化空对象(无任何字段的类)是否报错 true(报错) 若项目中有空DTO(如标记类),需关闭避免报错

2. 代码示例:序列化全局配置

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;public class GlobalSerializeConfig {public static void main(String[] args) throws Exception {// 1. 实例化ObjectMapperObjectMapper objectMapper = new ObjectMapper();// 2. 配置序列化规则(全局生效)objectMapper// 开发环境开启格式化输出,生产环境注释此行.enable(SerializationFeature.INDENT_OUTPUT)// 关闭空集合序列化(避免返回"list":[]).disable(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS)// 关闭null值序列化(避免返回"key":null).disable(SerializationFeature.WRITE_NULL_MAP_VALUES)// 枚举序列化用toString()结果(假设枚举重写了toString).enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING)// 允许序列化空对象(无字段的类).disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);// 3. 测试:创建含空集合、null值、枚举的对象User user = new User();user.setUserName("张三");user.setAge(null); // null值,应被过滤user.setHobbies(new ArrayList<>()); // 空集合,应被过滤user.setGender(Gender.MALE); // 枚举,序列化用toString()(假设返回“男”)// 4. 序列化String json = objectMapper.writeValueAsString(user);System.out.println("全局配置后的序列化结果:");System.out.println(json);}// 测试实体类static class User {private String userName;private Integer age;private List<String> hobbies;private Gender gender;// getter/setter省略}// 枚举(重写toString()返回中文)enum Gender {MALE {@Overridepublic String toString() {return "男";}},FEMALE {@Overridepublic String 
http://www.dtcms.com/a/488394.html

相关文章:

  • 网站敏感关键词.txt招商网站开发文档
  • 遵化建设招标网站上海某家具网站建设方案
  • 网站建设公司排名及费用深圳seo教程
  • seo网站优化工具wordpress 快讯模板
  • 网站开发一般用的字体类型网站怎么做才美观
  • 【Spring Security】认证(二)
  • 网站最常用字体网站关于我们的页面
  • Linux系统--信号(1--准备)
  • 怀柔营销型网站建设网站服务器租用价格 百度一下
  • 如何查找网站备案品牌开发者应考虑的因素
  • 充值网站建设旅游网络营销论文
  • 各大网站新闻热门软件排行榜
  • 追觅的想象空间:以技术为翼,向生态无垠
  • wap网站搭建品牌注册查询系统
  • 在线购物网站怎么做承德公司做网站
  • ptmalloc原理(简)
  • 优选算法之双指针:从原理到实战,解决数组与链表
  • 泰安网站建设企业门户网站静态模板
  • 做招聘网站的背景图片手机建网站 优帮云
  • 湖州网站建设湖州网站建设网站建设运营计划书
  • Spring的核心思想与注解
  • 洛阳响应式建站wordpress无法搜索插件
  • 幻灯片在什么网站做dw做的静态网站怎么分享链接
  • 做网站如何推销小公司做网站的好处
  • 力扣Hot100--106.对称二叉树
  • 胡恩全10.15作业
  • 网站推广需要多少钱教学网站开发源码
  • ACSM-CPT 8周冲刺每日学习计划(10/16–12/15)
  • 公司备案网站名称代理ip注册网站都通不过
  • 杭州建设银行网站智慧团建登录不上