Java坑 之 JSON序列化

Posted 非驴非码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java坑 之 JSON序列化相关的知识,希望对你有一定的参考价值。



  • 背景

JAVA Web 开发中前后端常常以对象序列化为Json格式传输数据,一般我们会只期望对象的成员变量被序列化。


abstract public class TaskBase {
private String assetId;
abstract  public String getUrlParameters();

如上,我们定义了一个虚拟方法getUrlParameters,返回一个String类型,当该抽象类的子类实现该方法后,被序列化的子类对象将会出现一个urlParameters的key,但我们的代码是没有定义urlParameters成员的。

        {

            "assetId": "CA2914F46A08433FBF52E940FEAD9805",

            "urlParameters": "dataPointId1",

        }


  • 原因

原来在后端把对象以ResponseBody返回给前端时,会调用默认序列化方法,而该方法采用的是Jackson做为Json序列化类,该Jackson会先利用反射找到对象类的所有get方法,并把get字符串去掉,小写剩余字符串的头字母作为json的每个key值,而get方法的返回值作为value。然后再反射成员变量,添加到json中。类似的处理方式还有fastjson。


  • 解决方案

1. 修改方法名getXXX成fetchXXX

2. 利用 google提供的Gson对对象进行转换


  • 后感

Java完美的封装让软件的开发效率得到大大的提高,相比C/C++,让入门门槛更低。但一个好的码工不仅仅是需要利用其便利之处,也应深入了解其原理,前者利于公司,后者利于个人,把握好平衡。




以上是关于Java坑 之 JSON序列化的主要内容,如果未能解决你的问题,请参考以下文章

Java反序列化之Jackson-databind

Java单元测试技巧之JSON序列化

Java 里 Hashmap 序列化的一个坑

Java JSON 反序列化之殇(看雪2017安全开发者峰会演讲回顾11)

json反序列化的时候字符串为单引号的一个坑

聊聊fastjson反序列化的那些坑