两种方式

1 忽略json上未知的字段

设置实体类注解

@JsonIgnoreProperties(ignoreUnknown = true)

public class Foo {
...
}

2 配置objectMapper

public static <T> T JsonNode2Entity(JsonNode node,Class t ,boolean throwErr) throws RuntimeException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); //忽略大小写
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); //json 为SNAKE_CASE 实体为lowerCase Camel
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); //对未知的属性不处理
try {
return (T) objectMapper.readValue(node.toString(), t); } catch (java.lang.Exception e) {
e.printStackTrace();
if(throwErr){
//ThrowWarnning(ErrorCode.Err_ParseParam);
throw new RuntimeException("参数解析失败");
}
return null;
}
}
例:
snake_case json
{
"context": {
"year": "2019"
},
"data": {
"GDXMZD_CZZD_GDCZLB_TITL": "项目明细",
"GDXMZD_SFWY": "0",
"GDXMZD_KFXG": "0",
"GDXMZD_LBID": "%",
"GDXMZD_XMXZ": "0",
"GDXMZD_XMMC": "新增的项目",
"GDXMZD_KFBG": "0",
"GDXMZD_GSSM": null,
"GDXMZD_QJY": "",
"CREATOR": "admin",
"LASTMODIFIER": "admin",
"GDXMZD_CZZD_GDCZLB_CZZD": "vo",
"ID": "40282e816d15be06016d15c259650000",
"GDXMZD_XMLX": "C",
"GDXMZD_KPMX": "1",
"GDXMZD_JSXS": "0",
"GDXMZD_JSGS": null,
"GDXMZD_SFBT": "0",
"GDXMZD_XSSX": 98,
"GDXMZD_CZZD": "xmmx",
"GDXMZD_DECN": 0,
"GDXMZD_XMBH": "GDZCZY_XM01",
"GDXMZD_IFENUM": "0",
"GDXMZD_LENG": "888",
"GDXMZD_IFCZ": "1",
"GDXMZD_IFPUB": "0"
}
}

转换的实体

@Data
@Entity
@DynamicInsert
@DynamicUpdate @Table(name = "figdxmzd2019")
public class GDXMZD {
@Id
@GenericGenerator(name = "uuid",strategy = "uuid")
@GeneratedValue(generator = "uuid")
@Column(name = "id", nullable = false, length = 36)
public String id;
@Column(name = "gdxmzd_lbid", nullable = false, length = 36)
public String gdxmzdLbid;
@Column(name = "gdxmzd_xmbh", nullable = false, length = 60)
public String gdxmzdXmbh;
@Column(name = "gdxmzd_xmmc", nullable = false, length = 60)
public String gdxmzdXmmc;
@Column(name = "gdxmzd_xmlx", nullable = false, length = -1)
public String gdxmzdXmlx;
@Column(name = "gdxmzd_xmxz", nullable = false, length = -1)
public String gdxmzdXmxz;
@Column(name = "gdxmzd_jsgs", length = 1000)
public String gdxmzdJsgs;
@Column(name = "gdxmzd_gssm", length = 1000)
public String gdxmzdGssm;
@Column(name = "gdxmzd_xssx", length = 3)
public int gdxmzdXssx;
@Column(name = "gdxmzd_leng", nullable = false)
public int gdxmzdLeng;
@Column(name = "gdxmzd_decn", nullable = false)
public int gdxmzdDecn;
@Column(name = "gdxmzd_ifpub", nullable = false, length = -1)
public String gdxmzdIfpub;
@Column(name = "gdxmzd_kpmx", nullable = false, length = -1)
public String gdxmzdKpmx;
@Column(name = "gdxmzd_kfbg", nullable = false, length = -1)
public String gdxmzdKfbg;
@Column(name = "gdxmzd_sfbt", nullable = false, length = -1)
public String gdxmzdSfbt;
@Column(name = "gdxmzd_kfxg", nullable = false, length = -1)
public String gdxmzdKfxg;
@Column(name = "gdxmzd_ifcz", nullable = false, length = -1)
public String gdxmzdIfcz;
@Column(name = "gdxmzd_czzd", nullable = false, length = 20)
public String gdxmzdCzzd;
@Column(name = "gdxmzd_ifenum", nullable = false, length = -1)
public String gdxmzdIfenum;
@Column(name = "gdxmzd_jsxs", nullable = false, length = -1)
public String gdxmzdJsxs;
@Column(name = "gdxmzd_sfwy", nullable = false, length = -1)
public String gdxmzdSfwy;
@Column(name = "gdxmzd_qjy", nullable = false, length = -1)
public String gdxmzdQjy;
@Column(name = "createdtime")
public LocalDateTime createdtime;
@Column(name = "lastmodifiedtime")
public LocalDateTime lastmodifiedtime;
@Column(name = "lastmodifier", length = 128)
public String lastmodifier;
@Column(name = "creator", length = 128)
public String creator; public GDXMZD(){} public GDXMZD(String xmbh){
this.gdxmzdXmbh=xmbh;
} @PrePersist
protected void onCreate() {
createdtime = CAFContext.current.getCurrentDateTime();
creator = CAFContext.current.getUserId();
} @PreUpdate
protected void onUpdate() {
lastmodifiedtime = CAFContext.current.getCurrentDateTime();
lastmodifier = CAFContext.current.getUserId();
} }

反向转换(序列化)

 ObjectMapper m = new ObjectMapper();
m.setPropertyNamingStrategy(new UpperSnakCasePropertyNamingStrategy());
m.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
try {
m.writeValue(System.out, gdxmzdRepository.findAll());
} catch (IOException e) {
e.printStackTrace();
}

参考:

https://stackoverflow.com/questions/5455014/ignoring-new-fields-on-json-objects-using-jackson

objectMaaper 反序列化json字段多于或少于实体处理的更多相关文章

  1. 无实体反序列化Json

    public class ExectendHelp { private int index = 0; public void GetLast(JObject obj, ref JToken token ...

  2. PG 中 JSON 字段的应用

    13 年发现 pg 有了 json 类型,便从 oracle 转 pg,几年下来也算比较熟稔了,总结几个有益的实践. 用途一:存储设计时无法预料的文档性的数据.比如,通常可以在人员表准备一个 json ...

  3. C#序列化及反序列化Json对象通用类JsonHelper

    当今的程序界Json大行其道.因为Json对象具有简短高效等优势,广受广大C#码农喜爱.这里发一个序列化及反序列化Json对象通用类库,希望对大家有用. public class JsonHelper ...

  4. C# Dynamic通用反序列化Json类型并遍历属性比较

    背景 : 最近在做JAVA 3D API重写,重写的结果需要与原有的API结果进行比较,只有结果一致时才能说明接口是等价重写的,为此需要做一个API结果比较的工具,比较的内容就是Json内容,但是为了 ...

  5. c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具

    c#实例化继承类,必须对被继承类的程序集做引用   0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...

  6. Java基础/利用fastjson反序列化json为对象和对象数组

    利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...

  7. mybatis&plus系列------Mysql的JSON字段的读取和转换

    mybatis&plus系列------Mysql的JSON字段的读取和转换 一. 背景 在平常的开发中,我们可能会有这样的需求: 业务数据在存储的时候,并不是以mysql中的varchar丶 ...

  8. 如何用js定义数组,用js来拼接json字段

    定义js数组的方式有: var arr = (); var arr = []; var arr = new Array(); 如何拼接成一个json字段. <!DOCTYPE HTML PUBL ...

  9. Jackson序列化和反序列化Json数据完整示例

    Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会 ...

随机推荐

  1. Java基础之数组类型

    对于Java,前面的一些基础概念不是很想写,看了看还是从数组开始写吧(毕竟数组是第一个引用类型,相对复杂一点),我也是学了JAVA不是很久,目前看完了JAVA的基础视频,还有JAVA疯狂讲义这本书的大 ...

  2. 十九、python内置函数汇总

    '''内置函数abs():取绝对值all():每个元素都为真,才是真any():有一个元素为真即为真bin():十进制转二进制hex():十进制转十六进制int():所有的转成十进制oct():十进制 ...

  3. LeetCode 103——二叉树的锯齿形层次遍历

    1. 题目 2. 解答 定义两个栈 s_l_r.s_r_l 分别负责从左到右和从右到左遍历某一层的节点,用标志变量 flag 来控制具体情况,根节点所在层 flag=1 表示从左到右遍历,每隔一层改变 ...

  4. Vue知识整理2:Vue生命周期方法

    在vue执行过程中,可以分为beforeCreate.created.BeforeMount.mounted  .BeforeUpdate.updated 等常用的方法,如下图所示. 除此之外,通过查 ...

  5. 使用spring提供的@Scheduled注解创建定时任务

    使用方法 操作非常简单,只要按如下几个步骤配置即可 1. 导入jar包或添加依赖,其实定时任务只需要spring-context即可,当然起服务还需要spring-web: 2. 编写定时任务类和方法 ...

  6. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_4_缓冲流的效率测试_复制文件

    把之前文件复制的代码复制到这里 一个字节一个字节的读取,复制文件 byte数组的形式 缓冲流测试 数组缓冲

  7. 内置函数zip,map,even

    内置函数的补充:1.zip:l1 = ['a','b','c','e','f','g']l2 = [1,2,3]l3=['A','B','C']L4=['牛','牛','niu']#zip,就是把俩l ...

  8. 接口自动化之get/post请求

    本篇旨在对get和post请求做一个总结 目录 1.get请求 2.post请求 1.get请求 get请求一般形式相同,仅带url即可发送请求 对于https协议的请求,加一个特殊处理即可(veri ...

  9. KETTLE——(例)简单的字段转换

    一个简单的小例子:结合数据抽取.简单的字段转换.数据输出. 资源库连接.数据输入.数据输出.参见之前的文章. ​ 基本的转换结构是这样的,我们从表中输入,选择我们需要的字段,已经对应的名称,然后将数据 ...

  10. oracle--表空间处理

    CREATE TABLESPACE命令详解(转) 表空间理解 https://www.cnblogs.com/kerrycode/p/3418694.html 常用操作 https://www.cnb ...