目标
如何从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/