一、问题
- 当JavaBean中某个属性为null时,转为FastJson后,该属性缺失。
- 这种情况下如果以FastJson为返回值给被人提供接口,那么返回的参数数量不固定。
- 因此,现在需要解决的是:无论某参数是否为null,转化为FastJson后都不让其“消失”。
二、解决
1、null属性缺失情况演示
- 使用如下代码测试:
class St {
private String sid;
private String sname;
private String ssex;
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSsex() {
return ssex;
}
public void setSsex(String ssex) {
this.ssex = ssex;
}
public static void main(String[] args) {
St st = new St();
st.setSid("111");
st.setSname("aaa");
JSONObject jsonSt = JSONObject.parseObject(JSON.toJSONString(st));
System.out.println(jsonSt);
}
}
输出结果:
发现ssex这个属性缺失。
2、解决后演示
在转化为JSONString方法中添加这个属性:SerializerFeature.WriteMapNullValue
public static void main(String[] args) {
St st = new St();
st.setSid("111");
st.setSname("aaa");
JSONObject jsonSt = JSONObject.parseObject(JSON.toJSONString(st, SerializerFeature.WriteMapNullValue));
System.out.println(JSON.toJSONString(jsonSt, SerializerFeature.WriteMapNullValue));
}
输出结果:
3、更多属性
上文中用到的JSON.toJSONString(Object object, SerializerFeature… features)方法SerializerFeature的属性值还有如下:
SerializerFeature属性 | 含义 |
---|---|
UseSingleQuotes | 使用单引号而不是双引号,默认为false |
WriteMapNullValue | 使用输出为null的参数,默认为false |
WriteNullStringAsEmpty | 字符串为null时输出“” |
SortField | 按字段名称排序后输出 |
WriteNullNumberAsZero | 数值字段如果为null,输出0 |
参考:https://blog.csdn.net/jialanshun/article/details/79078750