需求:调用第三方数据,数据格式为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解决序列化与反序列化字段匹配问题相关推荐

  1. Python的序列化与反序列化

    序列化和反序列化可以大致分为两类:文本序列化和二进制序列化.比如python提供的pickle库,他就是基于二进制方式的序列化.而json则是文本方式的序列化,需要遵守相应的文件格式. 由于pickl ...

  2. JAVA中JSON序列化和反序列化

    JAVA中JSON序列化和反序列化 1 FASTJSON的序列化和反序列化 1.1 主函数 1.2 自定义对象 2 GSON序列化和反序列化 2.1 主函数 2.2 自定义对象 总结 不同包序列化和反 ...

  3. 面试:什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决?...

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | riemann_ 来源 | blog.csdn ...

  4. 什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决。...

    作者:riemann_ blog.csdn.net/riemann_/article/details/87835260 遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的 ...

  5. 什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决。

    欢迎大家关注我的公众号[老周聊架构],Java后端主流技术栈的原理.源码分析.架构以及各种互联网高并发.高性能.高可用的解决方案. 遇到这个 Java Serializable 序列化这个接口,我们可 ...

  6. 集合中的实体类根据一个字段合并_JAVA中序列化与反序列化

    一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化: 把字节序列恢复为对象的过程称为对象的反序列化. 说人话:就是JAVA对象需要保存或通过网络传输必须保存为二进制才行,所以就需要 ...

  7. Android序列化与反序列化

    1. 什么是java序列化,如何实现java序列化? 我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,要将java对象存储到硬盘或者传送给网络上的其他 ...

  8. 序列化和反序列化的概念_序列化的概念

    序列化和反序列化的概念 讨论了为什么Optional不可序列化以及如何处理(即将推出)之后,让我们仔细看看序列化. 总览 这篇文章介绍了序列化的一些关键概念. 它尝试精简地执行此操作,而不会涉及太多细 ...

  9. 【RPC】序列化与反序列化

    文章目录 1. 基本概念? 2. 文本格式的序列化方案 2.1 XML格式 2.2 JSON格式 3. 二进制格式的序列化方法 4. 序列化框架选型 1. 基本概念? 序列化和反序列化是一种数据转化的 ...

最新文章

  1. 元宇宙不是下一代互联网,而是人类群体思维空间或梦境世界的具现
  2. 李国杰院士:关于人工智能本质和价值的13个判断,谨防重蹈覆辙!
  3. GraphQL 配合 JWT 使用 —— Laravel RSS (二)
  4. 制作 OpenStack Linux 镜像 - 每天5分钟玩转 OpenStack(151)
  5. 再次理解STM32中的堆栈机制
  6. linux 64位兼容32位,linux的64位操作系统对32位程序的兼容-全面分析
  7. matplotlib——在 Jupyter Notebook中绘制图像时只显示变量信息不显示图片
  8. 如何对第三方数据进行大数据分析
  9. 一步一步实现KNN分类算法
  10. recv函数阻塞_socket缓冲区以及阻塞模式详解
  11. php tp框架,TP框架
  12. IP6K防尘试验测试
  13. 安卓默认下载工具_PanDownload安卓内测版 — 不限速下载工具
  14. 情感+事业,强者必学的定律
  15. AOJ-AHU-OJ-592 神奇的叶子
  16. 苹果app退款_苹果上最流氓的功能,终于被彻底关掉
  17. 服务器U盘安装安装centos
  18. 强化学习9——贝尔曼方程
  19. 【24位IEPE振动加速度音频采集卡-北京阿尔泰科技】
  20. ISIS Neighbor Net Type DIS

热门文章

  1. R语言聚类算法之系谱聚类(Hierarchical Method)
  2. freecplus框架-日期、时间和计时器
  3. java yyyy-mm-dd 日期格式_Java中的日历日期为yyyy-MM-dd格式
  4. 大蜘蛛序列号_Datacolor SpyderX 蓝蜘蛛 (红蜘蛛)校色仪 使用教程
  5. 利用数据缓存加速文件备份
  6. python 收发邮件_Python 【收发邮件】
  7. 消息中间件 rabbitMQ
  8. 超实用!!!使用IDEA插件Alibaba Cloud Toolkit工具一键部署本地应用到ECS服务器
  9. 从零实现Vue的组件库(零)- 基本结构以及构建工具
  10. 工欲善其事,必先利其器之sublime