FastJson序列化部分字段的方法
Maven FastJson
引入 fastjson 的 Maven 依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
FastJson 序列化依据
FastJson 是根据 getter 方法来序列化的
指定某些字段进行序列化
- 只为需要序列化的字段生成 getter 方法,相反地,不希望序列化的字段就不生成 getter 方法
- 缺点:有时候,虽然是不希望序列化的字段,但是代码中也是需要使用其 getter 方法的。
- 假如Java Bean对象所有属性的 getter 方法都存在,还可以使用过滤器 SimplePropertyPreFilter 指定字段名称。(注意如果没有 getter 方法,过滤器中就算指定名称也不会生效)
- 缺点:因为使用字符串来指定字段名称,所以如果类的属性名称修改了,这个地方的代码就会失效。
SimplePropertyPreFilter filter = new SimplePropertyPreFilter(User.class, "name");
String data = JSONObject.toJSONString(user, filter);
排除某些字段
假如Java Bean对象所有属性的 getter 方法都存在,我们还有一个思路,就是排除某些字段,不让这些字段参与序列化:
- 可以通过 @JSONField(serialize = false) 阻止某些字段序列化
关于是否需要添加默认构造函数的问题
我自己测试了一下,假如没有默认构造函数:
- 1.2.35 版本及以前版本,反序列化时会抛出 com.alibaba.fastjson.JSONException: default constructor not found. class test.fastjson.serialization.User
- 1.2.36 版本及以后版本,即使没有默认构造函数也不会抛出异常,会去尝试寻找合适的构造函数,具体逻辑,先留个坑,以后再研究一下源码再说。