使用jackson时忽略属性和访问器

时间:2013-09-02 20:36:54

标签: java json rest jackson jax-rs

我有一个POJO,我需要序列化为JSON。 POJO有很多属性,我想将其中的一些属性序列化为JSON表示。我正在使用杰克逊序列化。由于我想忽略很多属性,因此将每个属性注释为@JsonIgnore

看起来非常难看

有没有办法告诉jackson或将objectMapper配置为仅在注释为@JsonProperty时包含属性,并忽略其余的而不指定@JsonIgnore。

3 个答案:

答案 0 :(得分:5)

像这样设置对象映射器:

ObjectMapper mapper = new ObjectMapper();
mapper.setVisibilityChecker(mapper.getDeserializationConfig().getDefaultVisibilityChecker()
        .withCreatorVisibility(JsonAutoDetect.Visibility.NONE)
        .withFieldVisibility(JsonAutoDetect.Visibility.NONE)
        .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
        .withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
        .withSetterVisibility(JsonAutoDetect.Visibility.NONE));

Horte的信用:)

答案 1 :(得分:2)

通过扩展到Enrichman的答案,您还可以注释您的POJO类以达到同样的效果:

@JsonAutoDetect(
    creatorVisibility = JsonAutoDetect.Visibility.NONE, 
    fieldVisibility = JsonAutoDetect.Visibility.NONE,
    getterVisibility = JsonAutoDetect.Visibility.NONE,
    isGetterVisibility = JsonAutoDetect.Visibility.NONE,
    setterVisibility = JsonAutoDetect.Visibility.NONE
)
public class MyPojo {

    // fields, getters, setter, constructors, etc.

}

默认情况下,这会忽略您的POJO中未注明JsonProperty的所有内容。

答案 2 :(得分:0)

@JsonAutoDetect(JsonMethod.NONE)

将忽略未在@JsonProperty

注释的班级中的所有字段

但它仅适用于org.codehaus.jackson而不是com.fasterxml.jackson