2026/10/9 5:36:10

Java 企业级工具类全家桶-74-JSON序列化工具类

Java 企业级工具类全家桶-74-JSON序列化工具类 拿来即用 Java 企业级工具类全家桶-74-JSON序列化工具类 目录一、工具类功能二、所需环境三、方法概览按需调用四、调用示例直观体验五、工具类源码可直接复制一、工具类功能给业务代码用的 JSON 工具类对象、List/Map、泛型结构与 JSON 字符串互转DTO/VO/实体互转日期时间按统一格式读写不必到处 newObjectMapper。两套错误契约parseXxx严格模式报文非法就抛异常parseXxxQuietly容错模式空白与非法给 null 或空集合。忽略实体多出来的字段但拒绝残缺报文面向报文级读写不做超大 JSON 的流式处理。二、所需环境JDK 17或以上 Spring Boot 3.x或以上dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdscopeprovided/scope/dependency三、方法概览按需调用序号方法入参返回用途1toJson(Object)待序列化对象String紧凑 JSON 字符串对象为 null 得到 “null”2toPrettyJson(Object)待序列化对象String带缩进的多行 JSON排查与落日志用3parseObject(String, Class)JSON 字符串 目标类型T严格模式取单个对象4parseObject(String, TypeReference)JSON 字符串 泛型类型T严格模式取 List/Map 等泛型结构5parseObjectQuietly(String, Class)JSON 字符串 目标类型T容错模式空白或非法给 null6parseList(String, Class)JSON 字符串 元素类型List严格模式取列表元素类型直接指定7parseListQuietly(String, Class)JSON 字符串 元素类型List容错模式空白、非法或结构不符给空列表8parseMap(String, Class, Class)JSON 字符串 键类型 值类型MapK,V严格模式取 Map键值类型直接指定9convertValue(Object, Class)源对象 目标类型TDTO/VO/实体互转不必先转成字符串10convertValue(Object, TypeReference)源对象 泛型类型T转成泛型结构如 List11getObjectMapper()无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双十一订单,count3]21:00:28.925[main]INFO--「JsonUtils方法4parseObject(json,TypeReference)」返回集合列表-[Order[name甲,count1],Order[name乙,count2]]21:00:28.925[main]INFO--「JsonUtils方法6parseList(json,Class)」返回集合列表-[Order[name甲,count1]]21:00:28.928[main]INFO--「JsonUtils方法8parseMap(json,Class,Class)」返回Map-{k1Order[name甲,count1]}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下单,at2026-10-04T20:30,day2026-10-04,time20: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线下单,count5]21:00:28.954[main]INFO--「JsonUtils方法10convertValue(source,TypeReference)」返回集合列表-[Order[name丙,count9]]21:00:28.955[main]INFO--「JsonUtils方法11getObjectMapper()」返回全局共享单例-同一实例true21:00:28.955[main]ERROR--「异常信息获取演示」残缺报文被拒绝-JSON反序列化为对象失败:Unrecognizedtoken尾巴:was expecting(JSONString,Number,Array,Objector tokennull,trueorfalse)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 就能看效果。 * * pJSON 工具不依赖外部服务示例直接用内存里的对象与报文跑通全部入口 * 日志用 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 字符串互转 StringjsonJsonUtils.toJson(newOrder(双十一订单,3));log.info(「JsonUtils 方法1 toJson(Object)」返回JSON字符串 - {},json);StringprettyJsonUtils.toPrettyJson(newOrder(双十一订单,3));log.info(「JsonUtils 方法2 toPrettyJson(Object)」返回美化JSON共{}行-{},pretty.lines().count(),System.lineSeparator()pretty);OrderorderJsonUtils.parseObject(json,Order.class);log.info(「JsonUtils 方法3 parseObject(json, Class)」返回对象 - {},order);// 二、泛型结构List 与 Map ListOrderordersJsonUtils.parseObject([{\name\:\甲\,\count\:1},{\name\:\乙\,\count\:2}],newTypeReference(){});log.info(「JsonUtils 方法4 parseObject(json, TypeReference)」返回集合列表 - {},orders);ListOrderlistJsonUtils.parseList([{\name\:\甲\,\count\:1}],Order.class);log.info(「JsonUtils 方法6 parseList(json, Class)」返回集合列表 - {},list);MapString,OrdermapJsonUtils.parseMap({\k1\:{\name\:\甲\,\count\:1}},String.class,Order.class);log.info(「JsonUtils 方法8 parseMap(json, Class, Class)」返回Map - {},map);// 三、日期时间契约与容错版 StringeventJsonJsonUtils.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);EventeventJsonUtils.parseObject(eventJson,Event.class);log.info(「JsonUtils 方法3 parseObject(json, Class)」还原日期时间 - {},event);OrderparsedJsonUtils.parseObjectQuietly({不是合法JSON},Order.class);log.info(「JsonUtils 方法5 parseObjectQuietly(json, Class)」非法输入容错 - {},parsed);ListOrderquietListJsonUtils.parseListQuietly({不是数组},Order.class);log.info(「JsonUtils 方法7 parseListQuietly(json, Class)」结构不符容错 - {},quietList);// 四、convertValue 与共享 ObjectMapper OrderFormformnewOrderForm(线下单,5);OrderconvertedJsonUtils.convertValue(form,Order.class);log.info(「JsonUtils 方法9 convertValue(source, Class)」返回转换后对象 - {},converted);ListOrderconvertedListJsonUtils.convertValue(List.of(Map.of(name,丙,count,9)),newTypeReference(){});log.info(「JsonUtils 方法10 convertValue(source, TypeReference)」返回集合列表 - {},convertedList);ObjectMappersharedJsonUtils.getObjectMapper();log.info(「JsonUtils 方法11 getObjectMapper()」返回全局共享单例 - 同一实例{},sharedJsonUtils.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 工具类已调试通过复制粘贴即可使用省时省力 可保存到自己网盘永久有效觉得对您有帮助麻烦点点关注啦您的关注是我创作的最大动力~