两种方式

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. 小程序swiper实现订单页面

    小程序swiper实现订单页面 myOrder.wxml <!--pages/myorder/myorder.wxml--> <view class="swiper-tab ...

  2. mui初级入门教程(五)— 聊聊即时通讯(IM),基于环信 web im SDK

    文章来源:小青年原创发布时间:2016-06-15关键词:mui,环信 web im,html5+,im,页面传值,缓存转载需标注本文原始地址: http://zhaomenghuan.github. ...

  3. IBM Security App Scan Standard 工具的使用

    1.AppScan是什么? AppScan是IBM的一款web安全扫描工具,可以利用爬虫技术进行网站安全渗透测试,根据网站入口自动对网页链接进行安全扫描,扫描之后会提供扫描报告和修复建议等. AppS ...

  4. oracle 表连接 - nested loop 嵌套循环连接

    一. nested loop 原理 nested loop 连接(循环嵌套连接)指的是两个表连接时, 通过两层嵌套循环来进行依次的匹配, 最后得到返回结果集的表连接方法. 假如下面的 sql 语句中表 ...

  5. tar命令: 解压到指定的目录, 解压并删除原tar文件

    -f: 置顶文件名, 后面不能再跟其他选项字母了,必须是文件名, 但是再在这个后面又可以跟 -? 选项: -C: 指定解压到的目的目录 不是-c, 小写的-c是创建. -p保留原来文件的属性. tar ...

  6. 软件-工具:Beyond Compare

    ylbtech-软件-工具:Beyond Compare 1.返回顶部 1. Beyond Compare是一套由Scooter Software推出的文件比较工具.主要用途是对比两个文件夹或者文件, ...

  7. ubuntu安装和使用git

    1.apt-get安装 apt-get install git 2.全局配置 git config --global user.name "yourname" git config ...

  8. mongodb 语法小结

    数据库 一个mongodb中可以建立多个数据库. MongoDB的默认数据库为"db",该数据库存储在data目录中. MongoDB的单个实例可以容纳多个独立的数据库,每一个都有 ...

  9. truncate()函数

    1 truncate()方法用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符,截断之后 size 后面的所有字符被删除. 参考: https://www.runoob.c ...

  10. Matlab入门基础

    matlab入门篇,一些基础用法记一下~ M语言是解释型语言 ​ who:查看当前变量 ​ whoes:查看当前变量及其维数.所占字节数等. ​ clear: 清除所有变量 ​ clear + 变量名 ...