gpt4 book ai didi

java - jackson JSON 序列化 : How to ignore a nested object when all its fields are null?

转载 作者:搜寻专家 更新时间:2023-11-01 03:31:47 25 4
gpt4 key购买 nike

我正在使用 Jackson,我有一些 JSON 模式对象设置如下:

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Person {

String name;
Child child = new Child();
Sibling sibling = new Sibling();

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public Child getChild() {
return child;
}
public void setChild(Child child) {
this.child = child;
}

public Sibling getSibling() {
return sibling;
}
public void setSibling(Sibling sibling) {
this.sibling = sibling;
}
}

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Child {

String name;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Sibling {

String name;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

我试图忽略所有为 null 或空的字段,但效果很好。但我也想忽略字段全部为 null 或空的对象。例如:

Person person = new Person();
person.setName("John Doe");
ObjectMapper mapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(person);

生成的 JSON 字符串是 {"name":"John Doe","child":{},"sibling":{}},但我希望它是 { “姓名”:“李四”ChildSibling 需要在创建 Person 时进行初始化,所以我不想更改它。有没有办法让 jackson 使用自定义序列化程序将具有空字段的对象视为空?我看过为特定类型的对象使用自定义序列化器的示例,但我需要一个适用于任何对象的序列化器。

最佳答案

您可以通过一种可以说更简单的方式实现这一点,无需为 PersonChildSibling 使用自定义序列化程序,但使用 CUSTOM 包含字段类型并将其作为过滤器传递。

首先为ChildSibling 定义正确的equals 方法。然后,要过滤等于其默认构造函数返回值的嵌套对象,请在 Person 中注释相关的 getter,如下所示:

@JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = Child.class)
public Child getChild() {
return child;
}

@JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = Sibling.class)
public Sibling getSibling() {
return sibling;
}

valueFilter 设置为上面的 Child.class 具有使用默认构造函数创建对象的效果 Child emptyChild = new Child() 和然后决定另一个对象 Child child 应该被序列化检查 emptyChild.equals(child) 是否为 false

docs for valueFilter

关于java - jackson JSON 序列化 : How to ignore a nested object when all its fields are null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50008338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com