两种方式

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. 4.16中Montage的一些变化

    用4.16版本跟着网上的几篇Montage教程(分别是对应4.6和4.8版本)做,遇到各种各样的问题,经过各种搜索和分析,最终终于搞定了. 4.16版的Montage和之前有了不小的变化,总结如下: ...

  2. [BZOJ2038]:[2009国家集训队]小Z的袜子(hose)(离线莫队)

    题目传送门 题目描述 作为一个生活散漫的人,小$Z$每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小$Z$把这 ...

  3. oracle 如何更改密码的hash

    如何迁移oracle user的密码到新的环境,一下列出了方法: select name,spare4||';'||password pwd from sys.user$ where name = ' ...

  4. 安装完Fedora 18后需要做的事情

    折腾了好久,在网上查看了好多资料,总算吧安装好的Fedora 18配置得差不多了,现在将过程记录下来,供以后查看用,同时也许还能帮助到和我遇到同一问题的朋友们,以后再有什么再继续添加吧. 一.添加 y ...

  5. url传输中+转为%2B取到变空格的问题

    一个加密串,通过url传过来后怎么也解密不了. 原串: h1tQYMmnx7jdvowi9KnaEM5dHfamJ+rbaRnvhwhUmRAvyxpA2AGzszx5k9K0qdhiQUq7m42S ...

  6. python生成requirements.txt 导出项目依赖

    使用pip freeze $ pip freeze > requirements.txt 这种方式是把整个环境中的包都列出来了,如果是虚拟环境可以使用. 通常情况下我们只需要导出当前项目的req ...

  7. Docker报错:“WARNING: IPv4 forwarding is disabled. Networking will not work.”解决。

    问题阐述 一次停电之后,服务器停机,然后ip莫名被占用,修改新的ip之后,ssh能够连接上去,但是web服务访问不了,数据库访问不了,除了22端口,其它服务端口都不能telnet. 防火前.IPtab ...

  8. 剑指offer--day01

    1.1题目:二维数组中的查找:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断 ...

  9. Layerui 弹出层的位置设置

    距顶 offset: '300px' 例1: layer.msg("请先选择项!", { offset: '300px' });例2: layer.confirm("确定 ...

  10. <每日一题> Day4:CodeForces-1042A.Benches(二分 + 排序)

    题目链接 参考代码: /* 排序 + 每次取小 #include <iostream> #include <algorithm> using namespace std; co ...