有没有办法使用杰克逊注释来调用同一个类作为类型@JsonSubTypes?
解释如下:
我创建了这个具有许多子类型的大师类
@JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = As.PROPERTY, property = "type" )
@JsonSubTypes( { @Type( value = FirstClass.class, name = "first" )
,@Type( value = SecondClass.class, name = "second" )
,@Type( value = ThirdClass.class, name = "third" ) } )
@Data
public abstract class Master {
public String name;
}
对于三个类(FirstClass、SecondClass 和 ThirdClass),它们包含不同的属性,在我的代码中我有 4 个不同的条件
if ( inputClass instanceof FirstClass){...}
else if ( inputClass instanceof SecondClass){...}
else if ( inputClass instanceof ThirdClass){...}
else if ( inputClass instanceof Master ){...}
我担心的是最后一个条件,其中inputClass 只有name和type属性,没有像其他情况一样的其他字段,所以我尝试通过将其添加到 JsonSubTypes 中来创建一个新类型
@Type( value = Master.class, name = "fourth" )
我把第四个条件改成了这个
if ( inputClass instanceof Master ){...}
但是当我使用此输入发送休息请求时
{
"name":"test",
"type":"fourth"
}
我收到此错误:
JSON解析错误:无法构造com.test.Master的实例,问题:抽象类型需要映射到具体类型,具有自定义反序列化器,或者使用附加类型信息进行实例化;嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException:无法构造 com.test.Master 的实例
看来我需要创建一个没有属性的类来将其用作类型而不是使用 master,我不知道是否有更好的解决方案
这是所使用的类的示例(第一、第二和第三)
@Data
@EqualsAndHashCode( callSuper = true )
@JsonTypeName( "FirstClass" )
public class FirstClass extends Master {
public FirstClass() {
}
private String attributeA = null;
//attributeB for SecondClass and attributeC for ThirdClass
}
芜湖不芜
相关分类