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插件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, name = "Cat"),
@Type(value = Dog.class, name = "Dog") })
public class Pet{
@JsonProperty("type")
private String type = null;
// getter and setters
}
现在我使用JacksonObjectMapper
解析传入的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忽略了类内注释,但尊重我作为混合输入显式提交的注释吗