JSONField解决序列化与反序列化字段匹配问题
需求:调用第三方数据,数据格式为Json,并提供一个接口将获取的第三方数据给本公司其他部门调用。
处理流程:第三方Json--反序列化实体--保存到本地数据库--查询数据--序列化Json数据供本公司调用。简化为:json--实体--json。
遇到问题:
1,把数据存到本地后,怎么取数据,各层级之间怎么关联?
2,json--实体,反序列化,有的实体中数据为null,未能解析到json数据?
3,实体--json,序列化,有的实体中的字段(比如:解决问题1时,增加的字段id,recordId)不需要序列化Json数据,即不需要展示给用户,如何不序列化?
解决方法:
1,创建表结构时,增加两个字段,id,recordId,id为每一层的主键,recordId为关联字段,用外层的id,对应里层recordId,让每一层建立关联关系,实现查询。
2,原因:Json数据中key与实体中定义字段不匹配。
看一下:json数据中key用下划线分割,而实体中定义变量时,形式为驼峰格式,这时可以正常解析,实体中对应属性有值。
而Json中标红的数据,用点分割(注意实体中不能直接定义用点分割的变量。),无法反序列化到实体。
解决方案一:注解加到变量上,用@JSONField(name = " "),对应json中key。
解决方案二:注解加到方法上,把该注解@JSONField(name = " "),加到set/get方法上,关键是加到set还是get方法上?结论是加到set方法上,可以理解为给实体中变量赋值,name值与json中key对应。
什么情况下:注解加到get方法上,实体序列化时,默认情况下,实体--json,json中key为实体中对应变量。如果想要别人调用接口获取的json,与第三方保持一致,即有下划线,可以通过在get方法上加注解,转化想要的json数据格式。
事例:
实体定义:
public class InputParametersSYS extends BasePojo {private BigDecimal recordId;private String partnerCode;private String idNumber;private String accountName;private String accountMobile; @JSONField(name = "mobile.name.id")private String mobileNameId;
Json数据:
"interfaces": [{"details": [{"result": {"result": 0,"success": true,"display": "一致"},"input_parameters": {"id_number": "370404199006301915","mobile.name.id": "mobile.name.id","account_name": "皮晴晴","account_mobile": "13333333333","partner_code": "pinganhq"}}],"type": "手机号三要素核验"},
3,
方案一:在对应的不需要显示的字段上加注解@JSONFiled(serialize = false)
//@JsonIgnore@JSONField(serialize = false)private Integer id;
方案二:加@JsonIgnore注解。不过当id,recordId 定义为int类型时,该注解不起作用。定义为Integet类型时,该注解生效。
1. JSONField 介绍(转载)
package com.alibaba.fastjson.annotation;public @interface JSONField {// 配置序列化和反序列化的顺序,1.1.42版本之后才支持int ordinal() default 0;// 指定字段的名称String name() default "";// 指定字段的格式,对日期格式有用String format() default "";// 是否序列化boolean serialize() default true;// 是否反序列化boolean deserialize() default true;
}
2. JSONField配置方式
FieldInfo可以配置在getter/setter方法或者字段上。例如:
2.1 配置在getter/setter上
public class A {private int id;@JSONField(name="ID")public int getId() {return id;}@JSONField(name="ID")public void setId(int value) {this.id = id;}}
2.2 配置在field上
public class A {@JSONField(name="ID")private int id;public int getId() {return id;}public void setId(int value) {this.id = id;}}
3. 使用format配置日期格式化
public class A {// 配置date序列化和反序列使用yyyyMMdd日期格式@JSONField(format="yyyyMMdd")public Date date;}
4. 使用serialize/deserialize指定字段不序列化
public class A {@JSONField(serialize=false)public Date date;}
5. 使用ordinal指定字段的顺序
缺省fastjson序列化一个java bean,是根据fieldName的字母序进行序列化的,你可以通过ordinal指定字段的顺序。这个特性需要1.1.42以上版本。
public static class VO {@JSONField(ordinal = 3)private int f0;@JSONField(ordinal = 2)private int f1;@JSONField(ordinal = 1)private int f2;
}
转载于:https://www.cnblogs.com/shenkebky/p/8377988.html
JSONField解决序列化与反序列化字段匹配问题相关推荐
- Python的序列化与反序列化
序列化和反序列化可以大致分为两类:文本序列化和二进制序列化.比如python提供的pickle库,他就是基于二进制方式的序列化.而json则是文本方式的序列化,需要遵守相应的文件格式. 由于pickl ...
- JAVA中JSON序列化和反序列化
JAVA中JSON序列化和反序列化 1 FASTJSON的序列化和反序列化 1.1 主函数 1.2 自定义对象 2 GSON序列化和反序列化 2.1 主函数 2.2 自定义对象 总结 不同包序列化和反 ...
- 面试:什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决?...
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | riemann_ 来源 | blog.csdn ...
- 什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决。...
作者:riemann_ blog.csdn.net/riemann_/article/details/87835260 遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的 ...
- 什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决。
欢迎大家关注我的公众号[老周聊架构],Java后端主流技术栈的原理.源码分析.架构以及各种互联网高并发.高性能.高可用的解决方案. 遇到这个 Java Serializable 序列化这个接口,我们可 ...
- 集合中的实体类根据一个字段合并_JAVA中序列化与反序列化
一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化: 把字节序列恢复为对象的过程称为对象的反序列化. 说人话:就是JAVA对象需要保存或通过网络传输必须保存为二进制才行,所以就需要 ...
- Android序列化与反序列化
1. 什么是java序列化,如何实现java序列化? 我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,要将java对象存储到硬盘或者传送给网络上的其他 ...
- 序列化和反序列化的概念_序列化的概念
序列化和反序列化的概念 讨论了为什么Optional不可序列化以及如何处理(即将推出)之后,让我们仔细看看序列化. 总览 这篇文章介绍了序列化的一些关键概念. 它尝试精简地执行此操作,而不会涉及太多细 ...
- 【RPC】序列化与反序列化
文章目录 1. 基本概念? 2. 文本格式的序列化方案 2.1 XML格式 2.2 JSON格式 3. 二进制格式的序列化方法 4. 序列化框架选型 1. 基本概念? 序列化和反序列化是一种数据转化的 ...
最新文章
- 元宇宙不是下一代互联网,而是人类群体思维空间或梦境世界的具现
- 李国杰院士:关于人工智能本质和价值的13个判断,谨防重蹈覆辙!
- GraphQL 配合 JWT 使用 —— Laravel RSS (二)
- 制作 OpenStack Linux 镜像 - 每天5分钟玩转 OpenStack(151)
- 再次理解STM32中的堆栈机制
- linux 64位兼容32位,linux的64位操作系统对32位程序的兼容-全面分析
- matplotlib——在 Jupyter Notebook中绘制图像时只显示变量信息不显示图片
- 如何对第三方数据进行大数据分析
- 一步一步实现KNN分类算法
- recv函数阻塞_socket缓冲区以及阻塞模式详解
- php tp框架,TP框架
- IP6K防尘试验测试
- 安卓默认下载工具_PanDownload安卓内测版 — 不限速下载工具
- 情感+事业,强者必学的定律
- AOJ-AHU-OJ-592 神奇的叶子
- 苹果app退款_苹果上最流氓的功能,终于被彻底关掉
- 服务器U盘安装安装centos
- 强化学习9——贝尔曼方程
- 【24位IEPE振动加速度音频采集卡-北京阿尔泰科技】
- ISIS Neighbor Net Type DIS
热门文章
- R语言聚类算法之系谱聚类(Hierarchical Method)
- freecplus框架-日期、时间和计时器
- java yyyy-mm-dd 日期格式_Java中的日历日期为yyyy-MM-dd格式
- 大蜘蛛序列号_Datacolor SpyderX 蓝蜘蛛 (红蜘蛛)校色仪 使用教程
- 利用数据缓存加速文件备份
- python 收发邮件_Python 【收发邮件】
- 消息中间件 rabbitMQ
- 超实用!!!使用IDEA插件Alibaba Cloud Toolkit工具一键部署本地应用到ECS服务器
- 从零实现Vue的组件库(零)- 基本结构以及构建工具
- 工欲善其事,必先利其器之sublime