Java 为什么Jackson忽略了类内注释,而尊重混合注释?

Java 为什么Jackson忽略了类内注释,而尊重混合注释?,java,spring,jackson,polymorphism,swagger,Java,Spring,Jackson,Polymorphism,Swagger,我使用swagger-codegen-maven插件version2.2.2为restapi生成Java类。API使用多态性,Swagger提供了相应的注释: @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true ) @JsonSubTypes({ @Type(value = Cat.class, n

我使用
swagger-codegen-maven插件
version
2.2.2
为restapi生成Java类。API使用多态性,Swagger提供了相应的注释:

@JsonTypeInfo(
  use = JsonTypeInfo.Id.NAME, 
  include = JsonTypeInfo.As.PROPERTY, 
  property = "type", 
  visible = true )
@JsonSubTypes({
  @Type(value = Cat.class, name = "Cat"),
  @Type(value = Dog.class, name = "Dog") })

public class Pet{

  @JsonProperty("type")
  private String type = null;

  // getter and setters

}
现在我使用Jackson
ObjectMapper
解析传入的JSON字符串。我使用的是spring boot starter父版本的
1.5.2.RELEASE
附带的Jackson:

ObjectMapper mapper = new ObjectMapper();
String body = "{ \"pet\": { \"type\": \"Dog\" } }";
Content content = mapper.readValue(body, Content.Class);
然而,这是失败的。Jackson忽略注释并将所有内容映射到
Pet
,而不是
Dog

Dog dog = (Dog) content.getPet(); // -> ClassCastException
作为一种解决方法,我添加了混合注释,这些注释只做原始注释。唯一的区别是它们位于一个单独的类中:

@JsonTypeInfo(
  use = JsonTypeInfo.Id.NAME, 
  include = JsonTypeInfo.As.PROPERTY, 
  property = "type", 
  visible = true)
@JsonSubTypes({
  @Type(value = Cat.class, name = "Cat"), 
  @Type(value = Dog.class, name = "Dog")})

public class PetAnnotations {
}
现在,这项工作:

// like above
mapper.addMixInAnnotations(Pet.class, PetAnnotations.class);
Content content = mapper.readValue(body, Content.Class);
Dog dog = (Dog) content.getPet(); // -> works!
你知道为什么Jackson忽略了类内注释,但尊重我作为混合输入显式提交的注释吗