将JSON企业管理系统定制开发数据转换成JAVA的实体类
企业管理系统定制开发看了好多博客不如这个up讲的好
Json使用场景
首先说一下,有许多jar包都可以
1.Jackson
<properties> <!--json 版本号--> <jackson.version>2.8.7</jackson.version> </properties><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version></dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
泛型的处理
通用配置
在静态配置代码块中
2.阿里巴巴的FastJson的具体使用
Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。
无依赖,不需要例外额外的jar,能够直接跑在JDK上。
FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。
FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.21</version></dependency>
- 1
- 2
- 3
- 4
- 5
1、序列化
1,问题1:不传参数时会把哪个字段消除,不会设置为null
如何解决
/** * WriteMapNullValue指定序列化时包含null */ String personStr = JSON.toJSONString(person, SerializerFeature.WriteMapNullValue);
- 1
- 2
- 3
- 4
2、问题2 : 日期化
时间格式不是我们想要的
{"addr":"河南","birthday":"2022-07-31T11:04:22.283","id":1,"name":null,"pwd":"123","registerDate":1659236662194,"websiteUrl":"com.edu.shengda"}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
解决办法
在类的属性上添加注解
@JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date registerDate; @JSONField(format = "yyyy-MM-dd HH:mm:ss") private LocalDateTime birthday;
- 1
- 2
- 3
- 4
打印结果
{"addr":"河南","birthday":"2022-07-31 11:07:27","id":1,"name":null,"pwd":"123","registerDate":"2022-07-31 11:07:27","websiteUrl":"com.edu.shengda"}
- 1
- 2
3、问题3 : 奇怪的$ref
[{"id":3,"name":"L4"},{"$ref":"$[0]"},{"$ref":"$[0]"}]
- 1
如何解决
/** * DisableCircularReferenceDetect 开启禁用引用探测 */ String string = JSON.toJSONString(List,SerializerFeature.DisableCircularReferenceDetect);
- 1
- 2
- 3
- 4
- 5
3、问题3 : SerializeFilter定制处理
对属性和属性值在序列化前做定制处理
2、反序列化
1、问题1 当有泛型时
3、通用设置
测试的时候可以看一下
指定属性名
指定不参与序列化和反序列化的字段
3.Google的Gjson
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version></dependency>
- 1
- 2
- 3
- 4
- 5