Java Jackson-如何为接口引用的反序列化指定单个实现?
我想用Jackson反序列化JSON对象。因为目标是一个接口,所以我需要指定应该使用哪个实现 可以使用@JsonTypeInfo注释将此信息存储在JSON对象中。但是我想在源代码中指定实现,因为它总是相同的 这可能吗?使用:Java Jackson-如何为接口引用的反序列化指定单个实现?,java,json,jackson,deserialization,Java,Json,Jackson,Deserialization,我想用Jackson反序列化JSON对象。因为目标是一个接口,所以我需要指定应该使用哪个实现 可以使用@JsonTypeInfo注释将此信息存储在JSON对象中。但是我想在源代码中指定实现,因为它总是相同的 这可能吗?使用: 如果您只有一个接口实现,那么还有另一种方法可以工作 public class ClassYouWantToDeserialize { @JsonDeserialize(as = ImplementationClass.class) private Inter
如果您只有一个接口实现,那么还有另一种方法可以工作
public class ClassYouWantToDeserialize {
@JsonDeserialize(as = ImplementationClass.class)
private InterfaceClass property;
...
}
这个问题在不久前得到了回答,但我想给您另一个选项,它不需要调优ObjectMapper,而且比@JsonTypeInfo注释简单得多。您也可以在接口上使用
@JsonDeserialize(as=ImplementationClass.class)
,所有引用都将以相同的方式反序列化
注意,如果您的一个实现类是一个enum,那么您可能还需要在enum上使用
@JsonFormat(shape=JsonFormat.shape.OBJECT)
。谢谢,如果您想将具体实现指定为注释,我刚刚找到了一个替代方案,听起来是一个不错的折衷方案@David Grant我们应该将SimpleAbstractTypeResolver放在代码中的什么位置,我正在使用spring boot。@har_shit在这里看一下spring:这是到目前为止对OP问题的最佳答案。如果我有2个实现,并且我想基于某种类型进行反序列化,该怎么办field@Gaurav这个答案应该对您有所帮助:请注意,如果目标接口嵌套到集合中,则@JsonDeserialize(contentAs=NestedType.class)
应该使用这里的问题是关于单个实现的,但是可以研究一般的继承,然后我们应该看到@JsonTypeInfo注释。例子
public class ClassYouWantToDeserialize {
@JsonDeserialize(as = ImplementationClass.class)
private InterfaceClass property;
...
}