一、案例展示
别以为fastjson1.2.60就是完美的jar包了,只是没有之前版本的bug而已,但是也有不如人意的地方,比如:fastjson生成json时Null属性不显示的问题,下面通过例子展示一下。
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private Integer id ;
private String name;
private String nickName;
private String address;
private String telephone;
}
public class TestCase {
Person p1=new Person();
{
p1.setId(1);
p1.setName("tom");
p1.setNickName(null);
p1.setTelephone("110");
p1.setAddress("shandong");
}
@Test
public void test1(){
String data1 = JSONObject.toJSONString(p1);
System.out.println("data = " + data1);
String data2 = **JSONObject.toJSONString(p1, SerializerFeature.WriteMapNullValue);**
System.out.println("data = " + data2);
}
}
结果如下:
data1 = {"address":"shandong","id":1,"name":"tom","telephone":"110"}
data2 = {"address":"shandong","id":1,"name":"tom","nickName":null,"telephone":"110"}
从控制台输出的结果可以看出来,null对应的key已经被过滤掉了~,这不是我们想要的结果,即使值为空,也要把key给咱们显示出来啊。 所以这个时候,我们就要用到 fastjson 的 SerializerFeature 序列化属性。
Fastjson的SerializerFeature序列化属性
* QuoteFieldNames———-输出key时是否使用双引号,默认为true
* WriteMapNullValue——–是否输出值为null的字段,默认为false
* WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
* WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null
* WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null
* WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null
二、当你实体中的属性要进行空处理,在属性上加注解就可以了
关于FastJSON的@JSONField中有一个属性serialzeFeatures,这个可以进行判空处理,当为null值时,该属性不进行序列化。
@JSONField(serialzeFeatures= {SerializerFeature.WriteMapNullValue})
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private Integer id ;
private String name;
@JSONField(serialzeFeatures= {SerializerFeature.WriteMapNullValue})
private String nickName;
private String address;
private String telephone;
}
public class TestCase {
Person p1=new Person();
{
p1.setId(1);
p1.setName("tom");
p1.setNickName(null);
p1.setTelephone(null);
p1.setAddress("shandong");
}
@Test
public void test2(){
String data = JSON.toJSONString(p1);
System.out.println("data = " + data);
}
结果:
data = {"address":"shandong","id":1,"name":"tom","nickName":null}
可以发现,telephone在结果中没有显示。