如果该领域没有任何条件为空,如何告诉杰克逊忽略一个领域?

时间:2015-07-21 12:40:33

标签: java serialization jackson

[不重复]。

我需要与JsonIgnore正好相反。在我的用例中,我只需要在序列化中添加一个字段,而忽略所有其他字段。我已经探索过@JsonSerialize,@ JsonInclude和@JsonProperty但没有按照我的要求工作。

有没有办法实现这一点,或者我需要用@JsonIgnore标记要忽略的字段?

2 个答案:

答案 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")