java如何在父类中指定类型的情况下,在Jackson中不使用type属性使子类反序列化
我有一个服务,它接收我的父接口作为输入,以便接收不同类型的输入。 接口定义如下:
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY)
@JsonSubTypes({
@JsonSubTypes.Type(value = Person.class, name = "person"),
@JsonSubTypes.Type(value = Employee.class , name = "employee")
})
public interface TestInterface {
}
我有一个获取TestInterface的服务,如下所示:
@RequestMapping(value="/convert", method = RequestMethod.POST)
@ResponseBody
public Person test(@RequestBody TestInterface object){}
此服务必须获得如下所示的json,并仅在文件类型属性下工作:
{"@type":"person","name":null,"family":"fami"}
问题是当我有一个直接接收子类的服务时,我不想指定类型属性
@RequestMapping(value="/convertPerson", method = RequestMethod.POST)
@ResponseBody
public Person test(@RequestBody Person object){}
在本例中,当我不发送类型属性时,我会得到(缺少类型id属性)异常。有没有办法让它在没有类型id的情况下工作? 我已经尝试了下面的配置,但没有解决问题:
spring.jackson.deserialization.fail-on-missing-external-type-id-property=false
# 1 楼答案
通过将@JsonTypeInfo(use=JsonTypeInfo.Id.NONE)放在子类的顶部,解决了这个问题。有了这个注释,子类可以独立工作,而不需要类型,父接口也可以很好地处理类型