目标

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

要求和背景

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

限制条件:


DAO层发送本机SQL查询,并接收大量DB结果作为List。开发人员必须使用索引将结果手动映射到Java对象(请参见下面的代码)
SQL查询返回很多空值(这些查询无法修改)。由于这些空值,经常实例化仅具有空值字段的Java对象


要求:


必须从JSON响应中排除所有具有空值的字段。已经使用Jackson @JsonInclude(JsonInclude.Include.NON_NULL)注释实现
必须从JSON响应中排除所有空的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"
}

最佳答案

尝试使用NON_EMPTY

@JsonInclude(JsonInclude.Include.NON_EMPTY)



  指示仅包含空值或视为空的属性的值。

关于java - 从json响应中排除空对象,空数组和空对象数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56685785/

10-10 13:59
查看更多