gpt4 book ai didi

java - 如果没有条件字段为空,如何告诉 Jackson 忽略该字段?

转载 作者:行者123 更新时间:2023-12-02 04:30:31 26 4
gpt4 key购买 nike

[不重复]。

我需要与 JsonIgnore 完全相反的东西。在我的用例中,我只需要在序列化中添加一个字段,所有其他字段都将被忽略。我探索过 @JsonSerialize、@JsonInclude 和 @JsonProperty,但没有一个按照我的要求工作。

有没有办法实现此目的,或者我需要使用 @JsonIgnore 标记要忽略的字段?

最佳答案

默认情况下,Jackson 将自动检测对象中的所有 getter 并序列化它们的值。 Jackson 区分了“普通”getters(以“get”开头)和“is-getters”(以“is”开头,用于 boolean 值)。您可以通过配置 ObjectMapper 来完全禁用两者的自动检测,如下所示:

ObjectMapper mapper = new ObjectMapper();
mapper.disable(MapperFeature.AUTO_DETECT_GETTERS);
mapper.disable(MapperFeature.AUTO_DETECT_IS_GETTERS);

或者,您可以使用 @JsonAutoDetect 在每个类的基础上禁用自动检测。使用 @JsonProperty 注释您实际想要序列化的字段或 getter。

@JsonAutoDetect(getterVisibility = JsonAutoDetect.Visibility.NONE, 
isGetterVisibility = JsonAutoDetect.Visibility.NONE)
public class MyObject {

private String foo;

@JsonProperty("bar")
private String bar;

private boolean fubar;

public MyObject(String foo, String bar, boolean fubar) {
this.foo = foo;
this.bar = bar;
this.fubar = fubar;
}

public String getFoo() {
return foo;
}

public String getBar() {
return bar;
}

public boolean isFubar() {
return fubar;
}

}

像这样序列化MyObject:

mapper.writeValueAsString(new MyObject("foo", "bar", true));

将生成以下 JSON

{"bar":"bar"}

关于java - 如果没有条件字段为空,如何告诉 Jackson 忽略该字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31539313/

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