Java Jackson中的全局忽略类

Java Jackson中的全局忽略类,java,jackson,Java,Jackson,Jackson能够使用反序列化功能来全局跳过未知属性,但我找不到任何全局配置来忽略正在解析的整个类。我有两个具有相同名称但参数不同的方法的类,所以我希望将该类设置为全局可忽略(使用objectMapper对象),而不仅仅是通过向模型类添加任何注释。可能有人面临这样的问题 对不起,英语不好 一个选项是用@JsonIgnoreType注释标记要忽略的类型。如果您不想用Jackson注释弄乱您的模型,您可以使用 另一个选项是重写以根据属性的类型忽略该属性 下面的示例显示了这两个方面: public c

Jackson能够使用
反序列化功能来全局跳过未知属性,但我找不到任何全局配置来忽略正在解析的整个类。我有两个具有相同名称但参数不同的方法的类,所以我希望将该类设置为全局可忽略(使用objectMapper对象),而不仅仅是通过向模型类添加任何注释。可能有人面临这样的问题


对不起,英语不好

一个选项是用@JsonIgnoreType注释标记要忽略的类型。如果您不想用Jackson注释弄乱您的模型,您可以使用

另一个选项是重写以根据属性的类型忽略该属性

下面的示例显示了这两个方面:

public class JacksonIgnoreByType {
    public static final String JSON = "{\n" +
            "  \"bean1\" : {\n" +
            "    \"field1\" : \"value1\"\n" +
            "  },\n" +
            "  \"bean2\" : {\n" +
            "    \"field2\" : \"value2\"\n" +
            "  },\n" +
            "  \"bean3\" : {\n" +
            "    \"field3\" : \"value3\"\n" +
            "  }\n" +
            "}\n";

    public static class Bean1 {
        public String field1;

        @Override
        public String toString() {
            return "Bean1{" +
                    "field1='" + field1 + '\'' +
                    '}';
        }
    }

    @JsonIgnoreType
    public static class Bean2 {
        public String field2;
    }

    public static class Bean3 {
        public String field3;
    }

    public static class Bean4 {
        public Bean1 bean1;
        public Bean2 bean2;
        public Bean3 bean3;

        @Override
        public String toString() {
            return "Bean4{" +
                    "bean1=" + bean1 +
                    ", bean2=" + bean2 +
                    ", bean3=" + bean3 +
                    '}';
        }
    }

    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector(){
            @Override
            public boolean hasIgnoreMarker(AnnotatedMember m) {
                return m.getRawType() == Bean3.class || super.hasIgnoreMarker(m);
            }
        });

        System.out.println(mapper.readValue(JSON, Bean4.class));
    }
}
输出:

Bean4{bean1=Bean1{field1='value1'}, bean2=null, bean3=null}

你试过混音吗?在JacksonObjectMapper中使用AddMixinNotations方法。我不知道全局解决方案;我的第一个猜测是标记字段(具有此类型)
transient
,使Jackson忽略它们。@Uwealner,尝试添加
AddMixinNotations
无助于您忽略所有类中具有特定类型参数的所有“setter”属性方法吗?@AlexeyGavrilov,最好只设置两种方法中的一种可忽略。但我认为这很难做到(通过ObjectMapper在全球范围内实现这一点可能是不可能的)。所以我想知道,有没有可能忽略整个课程,让Jackson在marshall和unmarshall期间跳过这个课程。