问题描述:
springboot项目中,编写了一个请求单条记录的接口,接口返回的数据进行了包装,这里用到了Hutool-json。
通过swagger测试接口,发现返回的结果里,对象数据中值为空的属性都被过滤掉了。对于前端和客户端接收使用稍有影响。
需求:
即使值为空的属性也要返回。
解决方案:
将 JSONUtil.toJsonStr(tmp); 改成 JSONUtil.toJsonStr(JSONUtil.parseObj(tmp, false));
1. 统一返回包装类部分代码(修改前)
import cn.hutool.json.JSONUtil;
import lombok.Data;
@Data
public class JsonView {
private Integer errcode = 0; // 错误代码 0-成功
private String message; // 消息
private Object data; // 数据
public static String render(Integer errcode, String message, Object data) {
JsonView tmp = new JsonView(errcode, message, data);
return JSONUtil.toJsonStr(tmp);
}
public JsonView(Integer errcode, String message, Object data) {
this.errcode = errcode;
this.message = message;
this.data = data;
}
}
2. 测试请求的返回结果(修改前)
3. 修改统一返回包装类中的序列化代码
将render()方法的返回改成 JSONUtil.toJsonStr(JSONUtil.parseObj(tmp, false));
因为使用JSONUtil.toJsonStr()方法序列化对象,默认会将对象中值为空的属性过滤掉。Hutool-json中提供了JSONUtil.parseObj()方法,接收两个参数:
/**
* obj: 需要序列化的对象
* ignoreNullValue: 是否忽略对象数据中值为空的属性,默认为true
*/
public static JSONObject parseObj(Object obj, boolean ignoreNullValue) {
return new JSONObject(obj, ignoreNullValue);
}