这个是最近刚开发的迭代中遇到的问题
频繁的转换JSON 结果导致空值字段丢失
但是对于前端来说即使字段值为空也需要返回
所以这个时候就需要做处理
我是用的是 import com.alibaba.fastjson.JSON;
下面以代码为例 :
依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
@Data
public class Person implements Serializable { //创建一个实体
/**
*
*/
private static final long serialVersionUID = 3193754045080382621L;
private String name;
private Integer sex;
private Integer age;
private String school;
}
public static void main(String[] args) { //测试
Person p = new Person();
p.setName("Akili");
p.setSex(1);
p.setAge(24);
p.setSchool(null);
String pJson = JSON.toJSONString(p);
System.out.println("pJson --- " + pJson);
String pJson2 = JSON.toJSONString(p, SerializerFeature.WriteMapNullValue);
System.out.println("pJson2 --- " + pJson2);
String pJson3 = JSON.toJSONString(p, SerializerFeature.WriteNullStringAsEmpty);
System.out.println("pJson3 --- " + pJson3);
}
由此可见,当使用重载方法传入一个序列化参数的时候
设置为null的字段依然存在
可以设置null值为null,也可以设置为""
灵活运用
如果要将一个JSON串转换成为一个对象或其他指定类型的话
以下代码:
@Data
public class Person implements Serializable { //创建一个实体
/**
*
*/
private static final long serialVersionUID = 3193754045080382621L;
private String name;
private Integer sex;
private Integer age;
private String school;
}
public static void main(String[] args) {//测试
Person p = new Person();
p.setName("Akili");
p.setSex(1);
p.setAge(24);
p.setSchool(null);
String pJson = JSON.toJSONString(p);
System.out.println("pJson --- " + pJson);
String pJson2 = JSON.toJSONString(p, SerializerFeature.WriteMapNullValue);
System.out.println("pJson2 --- " + pJson2);
String pJson3 = JSON.toJSONString(p, SerializerFeature.WriteNullStringAsEmpty);
System.out.println("pJson3 --- " + pJson3);
Person newP2 = JSON.parseObject(pJson2, Person.class);
System.out.println(newP2.toString());
Person newP3 = JSON.parseObject(pJson3, Person.class);
System.out.println(newP3.toString());
}
//输出结果
pJson --- {"age":24,"name":"Akili","sex":1}
pJson2 --- {"age":24,"name":"Akili","school":null,"sex":1}
pJson3 --- {"age":24,"name":"Akili","school":"","sex":1}
Person(name=Akili, sex=1, age=24, school=null)
Person(name=Akili, sex=1, age=24, school=)
注:本文仅用来记录自己在工作日常的学习总结,以上仅属于个人实践观点,如有问题请指正。