关于json值为null的处理

public void jdxx() {
    String zjhm = getPara("zjhm");
    List<Record> records = service.getJdxxInfoByZjhm(zjhm);
    renderJson(records);
}

若records中有字段内容为null,则返回:{name:"张三", gender:1, address: null },

而所期待的是像fastjson一样的返回:{name:"张三", gender:1}。

请问这个该怎么做?是否有像fastjson一样的可以配置:

Fastjson的SerializerFeature序列化属性:

QuoteFieldNames———-输出key时是否使用双引号,默认为true 
WriteMapNullValue——–是否输出值为null的字段,默认为false 
WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null 
WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null 
WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null 
WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null

评论区

Lintel

2017-12-16 16:22

继承JFinalJson,覆盖原来的实现,再写相应的工厂类,configConstant的时候设置成新的工厂类。。

PopezLotado

2017-12-16 17:55

楼上正解.
自建类继承JFinalJson,重写toJson.
return JSON.parse((super.toJson(object))).toString(); //JSON为fastjson,这里可自行定义SerializerFeature
自建工厂类实现IJsonFactory接口.
配置常量时:
me.setJsonFactory(new YourFastJsonFactory());

阿普

2017-12-16 21:20

@PopezLotado 实际上我也是这样弄的:JSON.parseObject(JFinalJson.getJson().toJson(obj)).toJSONString()。
我是想着看看jfinal未来的版本中能否增加这一特性,自己来控制该怎么输出。
@Jfinal

JFinal

2017-12-17 21:39

有个简单的办法是在转 json 前调用一次 model与record的 removeNullValues() 方法

阿普

2017-12-17 23:44

@JFinal 返回结果是个List,岂不是要都遍历一遍?