使用Hutool-json工具包中的JSONUtil.toJsonStr()方法序列化,对象数据中值为null的属性被过滤的问题

问题描述:

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. 测试请求的返回结果(修改前)

使用Hutool-json工具包中的JSONUtil.toJsonStr()方法序列化,对象数据中值为null的属性被过滤的问题_第1张图片

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);
}

4. 测试请求的返回结果(修改后)

使用Hutool-json工具包中的JSONUtil.toJsonStr()方法序列化,对象数据中值为null的属性被过滤的问题_第2张图片

你可能感兴趣的:(spring,boot,json,java,开发语言)