有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    通过将@JsonTypeInfo(use=JsonTypeInfo.Id.NONE)放在子类的顶部,解决了这个问题。有了这个注释,子类可以独立工作,而不需要类型,父接口也可以很好地处理类型

    @JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
    public class Person implements TestInterface{
    }