📌拿来即用: Java 企业级工具类全家桶-74-JSON序列化工具类
📋 目录
- 一、工具类功能
- 二、所需环境
- 三、方法概览(按需调用)
- 四、调用示例(直观体验)
- 五、工具类源码(可直接复制)
一、工具类功能
给业务代码用的 JSON 工具类:对象、List/Map、泛型结构与 JSON 字符串互转,DTO/VO/实体互转,日期时间按统一格式读写,不必到处 newObjectMapper。
两套错误契约:parseXxx严格模式,报文非法就抛异常;parseXxxQuietly容错模式,空白与非法给 null 或空集合。忽略实体多出来的字段,但拒绝残缺报文;面向报文级读写,不做超大 JSON 的流式处理。
二、所需环境
JDK 17或以上 + Spring Boot 3.x或以上
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency>三、方法概览(按需调用)
| 序号 | 方法 | 入参 | 返回 | 用途 |
|---|---|---|---|---|
| 1 | toJson(Object) | 待序列化对象 | String | 紧凑 JSON 字符串,对象为 null 得到 “null” |
| 2 | toPrettyJson(Object) | 待序列化对象 | String | 带缩进的多行 JSON,排查与落日志用 |
| 3 | parseObject(String, Class) | JSON 字符串 + 目标类型 | T | 严格模式取单个对象 |
| 4 | parseObject(String, TypeReference) | JSON 字符串 + 泛型类型 | T | 严格模式取 List/Map 等泛型结构 |
| 5 | parseObjectQuietly(String, Class) | JSON 字符串 + 目标类型 | T | 容错模式,空白或非法给 null |
| 6 | parseList(String, Class) | JSON 字符串 + 元素类型 | List | 严格模式取列表,元素类型直接指定 |
| 7 | parseListQuietly(String, Class) | JSON 字符串 + 元素类型 | List | 容错模式,空白、非法或结构不符给空列表 |
| 8 | parseMap(String, Class, Class) | JSON 字符串 + 键类型 + 值类型 | Map<K,V> | 严格模式取 Map,键值类型直接指定 |
| 9 | convertValue(Object, Class) | 源对象 + 目标类型 | T | DTO/VO/实体互转,不必先转成字符串 |
| 10 | convertValue(Object, TypeReference) | 源对象 + 泛型类型 | T | 转成泛型结构,如 List |
| 11 | getObjectMapper() | 无 | ObjectMapper | 拿共享单例做工具没覆盖的操作 |
四、调用示例(直观体验)
调用示例直接复制进 IDE 右键 Run 就能看到调用工具类各方法的输出结果。
21:00:28.888[main]INFO--「JsonUtils方法1toJson(Object)」返回JSON字符串->{"name":"双十一订单","count":3}21:00:28.891[main]INFO--「JsonUtils方法2toPrettyJson(Object)」返回美化JSON(共4行)->{"name":"双十一订单","count":3}21:00:28.911[main]INFO--「JsonUtils方法3parseObject(json,Class)」返回对象->Order[name=双十一订单,count=3]21:00:28.925[main]INFO--「JsonUtils方法4parseObject(json,TypeReference)」返回集合列表->[Order[name=甲,count=1],Order[name=乙,count=2]]21:00:28.925[main]INFO--「JsonUtils方法6parseList(json,Class)」返回集合列表->[Order[name=甲,count=1]]21:00:28.928[main]INFO--「JsonUtils方法8parseMap(json,Class,Class)」返回Map->{k1=Order[name=甲,count=1]}21:00:28.935[main]INFO--「JsonUtils方法1toJson(Object)」日期按约定格式写出->{"name":"下单","at":"2026-10-04 20:30:00","day":"2026-10-04","time":"20:30:00"}21:00:28.937[main]INFO--「JsonUtils方法3parseObject(json,Class)」还原日期时间->Event[name=下单,at=2026-10-04T20:30,day=2026-10-04,time=20:30]21:00:28.941[main]INFO--「JsonUtils方法5parseObjectQuietly(json,Class)」非法输入容错->null21:00:28.942[main]INFO--「JsonUtils方法7parseListQuietly(json,Class)」结构不符容错->[]21:00:28.945[main]INFO--「JsonUtils方法9convertValue(source,Class)」返回转换后对象->Order[name=线下单,count=5]21:00:28.954[main]INFO--「JsonUtils方法10convertValue(source,TypeReference)」返回集合列表->[Order[name=丙,count=9]]21:00:28.955[main]INFO--「JsonUtils方法11getObjectMapper()」返回全局共享单例->同一实例=true21:00:28.955[main]ERROR--「异常信息获取演示」残缺报文被拒绝->JSON反序列化为对象失败:Unrecognizedtoken'尾巴':was expecting(JSONString,Number,Array,Objector token'null','true'or'false')at[Source:REDACTED(`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled);line:1,column:24]21:00:28.955[main]ERROR--「异常信息获取演示」入参不合法->JSON字符串不能为空 进程已结束,退出代码为0packagecom.example.order.api;importcom.example.common.utils.JsonUtils;importcom.fasterxml.jackson.core.type.TypeReference;importcom.fasterxml.jackson.databind.ObjectMapper;importlombok.extern.slf4j.Slf4j;importjava.time.LocalDate;importjava.time.LocalDateTime;importjava.time.LocalTime;importjava.util.List;importjava.util.Map;/** * 调用示例:整个文件复制进 IDE,右键 Run 就能看效果。 * * <p>JSON 工具不依赖外部服务,示例直接用内存里的对象与报文跑通全部入口; * 日志用 Lombok 的 {@code @Slf4j} + SLF4J 占位符,没装 Lombok 就把 {@code log} 换成项目自己的 Logger。 */@Slf4jpublicclassJsonUtilsDemo{/** 示例用的 DTO,实际换成你自己的 */publicrecordOrder(Stringname,Integercount){}publicrecordOrderForm(Stringname,Integercount){}publicrecordEvent(Stringname,LocalDateTimeat,LocalDateday,LocalTimetime){}publicstaticvoidmain(String[]args){// ========== 一、对象与 JSON 字符串互转 ==========Stringjson=JsonUtils.toJson(newOrder("双十一订单",3));log.info("「JsonUtils 方法1 toJson(Object)」返回JSON字符串 -> {}",json);Stringpretty=JsonUtils.toPrettyJson(newOrder("双十一订单",3));log.info("「JsonUtils 方法2 toPrettyJson(Object)」返回美化JSON(共{}行)->{}",pretty.lines().count(),System.lineSeparator()+pretty);Orderorder=JsonUtils.parseObject(json,Order.class);log.info("「JsonUtils 方法3 parseObject(json, Class)」返回对象 -> {}",order);// ========== 二、泛型结构:List 与 Map ==========List<Order>orders=JsonUtils.parseObject("[{\"name\":\"甲\",\"count\":1},{\"name\":\"乙\",\"count\":2}]",newTypeReference<>(){});log.info("「JsonUtils 方法4 parseObject(json, TypeReference)」返回集合列表 -> {}",orders);List<Order>list=JsonUtils.parseList("[{\"name\":\"甲\",\"count\":1}]",Order.class);log.info("「JsonUtils 方法6 parseList(json, Class)」返回集合列表 -> {}",list);Map<String,Order>map=JsonUtils.parseMap("{\"k1\":{\"name\":\"甲\",\"count\":1}}",String.class,Order.class);log.info("「JsonUtils 方法8 parseMap(json, Class, Class)」返回Map -> {}",map);// ========== 三、日期时间契约与容错版 ==========StringeventJson=JsonUtils.toJson(newEvent("下单",LocalDateTime.of(2026,10,4,20,30,0),LocalDate.of(2026,10,4),LocalTime.of(20,30)));log.info("「JsonUtils 方法1 toJson(Object)」日期按约定格式写出 -> {}",eventJson);Eventevent=JsonUtils.parseObject(eventJson,Event.class);log.info("「JsonUtils 方法3 parseObject(json, Class)」还原日期时间 -> {}",event);Orderparsed=JsonUtils.parseObjectQuietly("{不是合法JSON}",Order.class);log.info("「JsonUtils 方法5 parseObjectQuietly(json, Class)」非法输入容错 -> {}",parsed);List<Order>quietList=JsonUtils.parseListQuietly("{不是数组}",Order.class);log.info("「JsonUtils 方法7 parseListQuietly(json, Class)」结构不符容错 -> {}",quietList);// ========== 四、convertValue 与共享 ObjectMapper ==========OrderFormform=newOrderForm("线下单",5);Orderconverted=JsonUtils.convertValue(form,Order.class);log.info("「JsonUtils 方法9 convertValue(source, Class)」返回转换后对象 -> {}",converted);List<Order>convertedList=JsonUtils.convertValue(List.of(Map.of("name","丙","count",9)),newTypeReference<>(){});log.info("「JsonUtils 方法10 convertValue(source, TypeReference)」返回集合列表 -> {}",convertedList);ObjectMappershared=JsonUtils.getObjectMapper();log.info("「JsonUtils 方法11 getObjectMapper()」返回全局共享单例 -> 同一实例={}",shared==JsonUtils.getObjectMapper());// ========== 五、异常:严格模式的两条线 ==========try{JsonUtils.parseObject("{\"name\":\"甲\",\"count\":1} 尾巴",Order.class);}catch(IllegalStateExceptione){log.error("「异常信息获取演示」残缺报文被拒绝 -> {}",e.getMessage());}try{JsonUtils.parseObject(null,Order.class);}catch(IllegalArgumentExceptione){log.error("「异常信息获取演示」入参不合法 -> {}",e.getMessage());}}}五、工具类源码(可直接复制)
📦拿来即用: 74-JSON序列化工具类(java企业级代码).zip
💡 工具类已调试通过,复制粘贴即可使用,省时省力
💡 可保存到自己网盘,永久有效
觉得对您有帮助,麻烦点点关注啦,您的关注是我创作的最大动力~ 🎯