如何从杰克逊在{}
中产生的JSON响应中排除所有空的json对象[]
,数组[{},{}]
或空对象RestController
? >
我正在为客户端构建Spring Boot REST API。 该API将请求发送到数据库,并且必须产生JSON响应。
@JsonInclude(JsonInclude.Include.NON_NULL)
注释实现{}
或数组[]
或空对象[{},{}]
的数组都必须从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"
}
答案 0 :(得分:0)
尝试使用NON_EMPTY
import os
path = 'c:\\projects\\hc2\\'
files = []
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
for file in f:
if '.txt' in file:
files.append(os.path.join(r, file))
for f in files:
print(f)
该值指示仅不包含具有空值或视为空的属性。
答案 1 :(得分:0)
您可以使用JsonInclude.Include.NON_EMPTY
。要使用此选项全局配置对象映射器,请为您的Spring Boot应用程序在配置中创建一个bean:
*mut c_char