当前位置: 首页 > 知识库问答 >
问题:

从json响应中排除空对象、空数组和空对象的数组

端木兴国
2023-03-14

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

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

  • DAO层发送本机SQL查询,并以列表形式接收巨大的DB结果。开发人员必须使用索引手动将此结果映射到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...
}
{
  prop1: "some string",
  prop2: [{},{},{}],
  prop3: [],
  prop4: {},
}

预期:

{
  prop1: "some string"
}

共有1个答案

周云
2023-03-14

尝试使用NON_EMPTY

@JsonInclude(JsonInclude.Include.NON_EMPTY) 

值,该值指示仅不包含具有空值的属性或被视为空的属性。

 类似资料:
  • 我用php curl发出请求,一些数据在响应中丢失。(数据数组中填充了空对象,数据在此丢失) 我的代码是: 以下是输出: curl_getinfo 答复: 请注意最后“数据”键中的空数组。 我在postman和jQuery中尝试了同样的请求。它返回正确的数据,没有任何损失。下面附有Javascript。 为什么php会丢失一些数据(数据键数组)以及如何保留它?

  • 我正在使用空手道JavaAPI处理Json对象。我将创建以下json: 当我尝试,我得到以下错误: json路径语法经过交叉检查是正确的,我可能缺少的任何其他点? 编辑:我正在使用v1。空手道核心1.0

  • 基本上,我不希望在生成的JSON文件中出现任何空的JSON数组或对象。我已经使用以下方法相应地配置了ObjectMapper: 这适用于数组、集合和字符串。但是,如果我有一个空对象(=所有属性都为null或empty),它仍然会显示在生成的JSON中,如下所示:

  • 问题内容: 我正在尝试使用gson将json字符串转换为对象。 我在下面有一个非常简单的示例,它可以运行,但是结果答案为空,即:我的Answer对象的文本字段为空。 问题答案: 因为您的JSON与您的课程不符。 现在,您的JSON是一个对象数组,每个对象包含一个对象作为字段。 JSON的处理方式如下所示: 编辑以添加评论: 如果您无法更改输出,则需要一个“包装器”。就像是: 并使用这些数组。这就是

  • 问题内容: 我有一个返回带有单个属性的JSON对象的请求,该属性是一个数组。如何测试数组是否为空? 使用jQuery代码,例如: 我可以用什么代替if(data.RoleOwners == [])来测试RoleOwners是否为空数组? 谢谢,马特 问题答案:

  • 下面是一个json响应的示例。正如您所看到的,像:news、number_likes、number_comment、number_post、user和owner这样的字段总是存在。但是像:place、place_mark、comment、album、photo这样的字段并不总是存在。这取决于新闻的类型。 请帮帮我!为了正确的json反序列化,我需要做什么?也许有人有经验,在编写自定义转炉工厂或可以