两种方式

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. All men are brothers

    All men are brothers 牛客多校第九场E 给定n个人,起初互不认识 然后m各阶段 每个阶段有两个人x.y认识 求每个阶段选出四个人互不认识的方式 并查集 #include<bi ...

  2. Java 静态static 关键字作用

    静态的方法1.可以通过类名打点访问2.不能使用this关键字3.不能访问非静态的属性和方法 /* * 静态的方法: * 1.属于类的方法,可以通过类名打点访问 * 2.方法中不能使用this关键字 * ...

  3. vue-cli目录结构介绍

    一个vue-cli的项目结构如下: 文件结构细分: 1.build——[webpack配置] build文件主要是webpack的配置,主要启动文件是dev-server.js,当我们输入npm ru ...

  4. HDU 6592 (LIS+输出字典序最大最小)

    题意:给你一个序列,让你找长度最长的字典序最小和最大的单峰序列,单峰序列就是满足先增后降的序列. 思路:先正着求一遍LIS,再反着求一遍LIS,然后用单调栈来模拟. 求字典序最小的话,首先找到第一个顶 ...

  5. MySQL主从复制中replicate-ignore-db replicate-wild-ignore-table的应用

    MySQL主从复制中replicate-ignore-db replicate-wild-ignore-table的应用 replicate-ignore-dbreplicate-wild-ignor ...

  6. leetcode 52 N皇后问题 II

    51的简化版,省去根据排列话棋盘的工作,直接计数,代码: class Solution { public: int totalNQueens(int n) { ; vector<); dfs(n ...

  7. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_02 泛型_1_泛型的概念

    ArrayList的源码,.在定义的时候用到了E这个E就是一个未知类型 ArrayList里面的add方法,参数也是E 包括我们之前常用的get方法 返回值也是E 类型什么时候可以确定呢?创建集合对象 ...

  8. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_2_Map常用子类

    常用的实现类HashMap 它的子类.LinkedHaspMap

  9. 测开之路八十七:HTML之a标签的用法

    初始化的HTML结构为,只需要在body里面加网页的标签和要显示的内容即可 <!DOCTYPE html><html lang="en"><head& ...

  10. 32 kill不掉的语句

    32 kill不掉的语句 在mysql中有两个kill命令:一个是kill query+线程id,表示终止这个线程正在执行的语句:一个是kill connection+线程id,缺省connectio ...