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

使用jackson将json转换为对象时,自定义转换字段内容

文章目录

  • 前言
  • 实体类
  • 工具类
  • 继承JsonDeserializer的子类
  • 测试类


前言

本文中采用的是继承JsonDeserializer抽象类 + 注解的方式实现自定义转换字段内容。

实体类

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.qf.utils.json.TestCustomDateDeserializer;
import lombok.Data;/*** @author qf* @since 2024/09/09 19:54*/
@Data
public class DataBo {@JsonProperty("name")@JsonDeserialize(using = TestCustomDateDeserializer.class)private String name;private String value;
}

工具类


import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;import java.io.IOException;
import java.util.List;/*** jackson工具类** @author qf* @since 2024/09/09 19:56*/
public class JacksonUtil {private static class SingletonHolder {private static ObjectMapper mapper = new ObjectMapper();static {// 在构造器中进行配置//反序列化的时候如果多了其他属性,不抛出异常mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);}}public static ObjectMapper getSingleton() {ObjectMapper mapper = SingletonHolder.mapper;return mapper;}/*** 对象转json** @param obj* @return* @throws JsonProcessingException*/public static String toJson(Object obj) throws JsonProcessingException {ObjectMapper mapper = getSingleton();return mapper.writeValueAsString(obj);}/*** json转为对象** @param json* @param clazz* @param <T>* @return* @throws IOException*/public static <T> T toObject(String json, Class<T> clazz) throws IOException {ObjectMapper mapper = getSingleton();return mapper.readValue(json, clazz);}/*** 通过字段名拿数据* jsonNode.get("xxx").toString();* 如果是数组* jsonNode.get("xxx").get(0).toString();* ...* jsonNode.get("xxx").get(n).toString();** @param json* @return* @throws IOException*/public static JsonNode getJsonNode(String json) throws IOException {ObjectMapper mapper = getSingleton();JsonNode jsonNode = mapper.readTree(json);return jsonNode;}/*** json转换为目标类型的列表。** @param json          JSON字符串* @param typeReference 目标类型的TypeReference* @param <T>           泛型类型* @return 转换后的列表* @throws IOException 如果读取失败*/public static <T> List<T> toList(String json, TypeReference<List<T>> typeReference) throws IOException {ObjectMapper mapper = getSingleton();return mapper.readValue(json, typeReference);}}

继承JsonDeserializer的子类

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;import java.io.IOException;/*** @author qf* @since 2024/09/09 20:03*/
public class TestCustomDateDeserializer extends JsonDeserializer<String> {@Overridepublic String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {String dateStr = p.getText();if("zs".equals(dateStr)){return "zhangsan";}return dateStr;}
}

测试类

import java.io.IOException;/*** @author qf* @since 2024/09/09 20:04*/
public class Test {public static void main(String[] args) throws IOException {String json = "{\"name\":\"zs\",\"value\":\"11\"}";DataBo bo = JacksonUtil.toObject(json, DataBo.class);System.out.println(bo);}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 简单计算机网络概念
  • 与 D3.js 的对比:ECharts 在前端可视化中的优势与劣势
  • 数据库类型有哪些?
  • C++ Windwos 文件操作
  • 从0开始搭建自动化测试平台,构建自动化测试平台的最全指南!
  • 低代码开发技术在农村现代化中的应用探索
  • CSS学习14[重点]--定位、边偏移、定位模式
  • CompletableFuture.allOf() + join() 和 CountDownLatch 优缺点对比
  • 【SPIE独立出版,连续2届稳定EI检索!】2024年第三届信息学,网络与计算技术国际学术会议(ICINC2024,10月25-27)
  • 《UniVS: Unified and Universal Video Segmentation with Prompts as Queries》要点提炼
  • HarmonyOS学习(十)——网络编程
  • 经验笔记:在 TypeScript 中使用 Promise
  • Unreal Fest 2024 虚幻引擎影视动画制作的普遍问题
  • 第六章 类和对象(6)
  • Unity Lua方向的面试真题详解
  • miaov-React 最佳入门
  • mongo索引构建
  • node入门
  • python学习笔记 - ThreadLocal
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Terraform入门 - 1. 安装Terraform
  • Theano - 导数
  • windows下mongoDB的环境配置
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 对象引论
  • 规范化安全开发 KOA 手脚架
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 利用jquery编写加法运算验证码
  • 前端攻城师
  • 跳前端坑前,先看看这个!!
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 王永庆:技术创新改变教育未来
  • AI算硅基生命吗,为什么?
  • 说说我为什么看好Spring Cloud Alibaba
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • # 数据结构
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (152)时序收敛--->(02)时序收敛二
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (libusb) usb口自动刷新
  • (九)c52学习之旅-定时器
  • (三)docker:Dockerfile构建容器运行jar包
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转载)从 Java 代码到 Java 堆
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • ... 是什么 ?... 有什么用处?
  • .bat批处理出现中文乱码的情况
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .so文件(linux系统)
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • []我的函数库
  • [1204 寻找子串位置] 解题报告