[不重复]。
我需要与JsonIgnore正好相反。在我的用例中,我只需要在序列化中添加一个字段,而忽略所有其他字段。我已经探索过@JsonSerialize,@ JsonInclude和@JsonProperty但没有按照我的要求工作。
有没有办法实现这一点,或者我需要用@JsonIgnore标记要忽略的字段?
答案 0 :(得分:2)
默认情况下,Jackson会自动检测对象中的所有getter并序列化它们的值。杰克逊区分“正常”的getter(以“get”开头)和“is-getters”(以“is”开头,对于布尔值)。您可以通过配置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"}
答案 1 :(得分:0)
您可以在变量顶部尝试 @JsonIgnoreProperties(" propertyName")。