Jackson禁用已键入注释类的键入

  • 本文关键字:注释 Jackson java jackson
  • 更新时间 :
  • 英文 :


假设我有以下类:

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

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

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

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

有什么想法吗?

实现这一点的最佳方法是通过mixin。

这里有一个例子:

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 {
}
}

最新更新