杰克逊序列化忽略用非杰克逊注释注释的字段

时间:2015-03-16 16:23:03

标签: java json annotations jackson

有没有办法告诉杰克逊在序列化期间忽略用非杰克逊注释注释的字段?

例如:

@SomeAnnotation
private String foo;

我知道有杰克逊注释可以做到这一点,但是我的字段已经用我的持久性注释注释了,所以我想避免重复,因为我已经有了带注释的字段我想忽略< / p>

1 个答案:

答案 0 :(得分:6)

我建议您只使用@JsonIgnore,否则您将隐藏某些特定方法和双重用途注释的内容。

但是......你可以通过扩展JacksonAnnotationIntrospector并覆盖_isIgnorable(Annotated)来实现这一目标:

publi class MyAnnotationIntrospector extends JacksonAnnotationIntrospector {
    @Override
    protected boolean _isIgnorable(Annotated a) {
        boolean isIgnorable = super._isIgnorable(a);
        if (!isIgnorable) {
            SomeAnnotation ann = a.getAnnotation(SomeAnnotation.class);
            isIgnorable = ann != null;
        }
        return isIgnorable;
    }
}

然后在对象映射器上设置注释introspector:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setAnnotationIntrospector(new MyAnnotationIntrospector());