首页 > 解决方案 > 从 json 响应中排除空对象、空数组和空对象数组

问题描述

目标

如何从 Jackson 在 a 中生成的 JSON 响应中排除所有空 json 对象{}、数组[]或空对象数组?[{},{}]RestController

要求和背景

我正在为客户端构建一个 Spring Boot REST API。API 向数据库发送请求,并且必须生成 JSON 响应。

约束:

要求:

代码

DAO 层中的手动映射:

public List<A> daoMethod() {
    List<Object[]> dbResult = getDbResults();
    List<A> javaObjects = new ArrayList<>();

    // build nested Java objects
    for (Object[] line in dbResult) {
        A a = new A();
        a.setProp1(line[0]);
        a.setProp2(line[1]);
        // and so on...
        javaObjects.add(a);
        return javaObjects ;
    }
}

控制器方法:

public ResponseEntity<A> controllerMethod() {
    List<A> javaObjects = myDao.daoMethod();
    return new ResponseEntity(javaObjects, HttpStatus.OK);
}

所有必须在 JSON 响应中序列化的 DTO 类都扩展了BaseDto该类:

@JsonInclude(JsonInclude.Include.NON_NULL) // removes all fields having NULL value
public abstract class BaseDto implements Serializable{
    // some properties...
}

实际和预期结果

当前 JSON 输出:

{
  prop1: "some string",
  prop2: [{},{},{}],
  prop3: [],
  prop4: {},
}

预期的:

{
  prop1: "some string"
}

标签: javaspring-bootjackson

解决方案


尝试使用NON_EMPTY

@JsonInclude(JsonInclude.Include.NON_EMPTY) 

指示仅具有空值的属性或被视为空的属性不包括在内的值。


推荐阅读