Jackson 禁用类型注释的输入 类

Jackson disable typing for typed annotated classes

假设我有以下 classes:

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "class")
@JsonSubTypes({ @JsonSubTypes.Type(value = Rabbit.class) })
abstract class Animal {
}

class Rabbit {
}

序列化时我通常需要类型,因此需要注释。 我有一个用例,我想序列化但没有类型 属性。我不想使用 DTO。我无法修改注释。

我试图在 ObjectMapper class 中找到一个选项来覆盖这些注释,但没有成功。

ObjectMapper serializer = new ObjectMapper();
serializer.deactivateDefaultTyping();

有什么想法吗?

实现此目的的最佳方法是通过混合。

这是一个例子:

public class TestMe2 {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper mapper1 = new ObjectMapper();
        System.out.println(mapper1.writeValueAsString(new Rabbit()));


        ObjectMapper mapper2 = new ObjectMapper();
        mapper2.addMixIn(Animal.class, NoTypes.class);
        System.out.println(mapper2.writeValueAsString(new Rabbit()));
    }

    static class Rabbit extends Animal {
    }

    @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "class")
    abstract static class Animal {
        public String name = "example";

    }

    @JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
    class NoTypes {
    }

}