Java Jackson-如何为接口引用的反序列化指定单个实现?

Java Jackson-如何为接口引用的反序列化指定单个实现?,java,json,jackson,deserialization,Java,Json,Jackson,Deserialization,我想用Jackson反序列化JSON对象。因为目标是一个接口,所以我需要指定应该使用哪个实现 可以使用@JsonTypeInfo注释将此信息存储在JSON对象中。但是我想在源代码中指定实现,因为它总是相同的 这可能吗?使用: 如果您只有一个接口实现,那么还有另一种方法可以工作 public class ClassYouWantToDeserialize { @JsonDeserialize(as = ImplementationClass.class) private Inter

我想用Jackson反序列化JSON对象。因为目标是一个接口,所以我需要指定应该使用哪个实现

可以使用@JsonTypeInfo注释将此信息存储在JSON对象中。但是我想在源代码中指定实现,因为它总是相同的

这可能吗?

使用:


如果您只有一个接口实现,那么还有另一种方法可以工作

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;
...
}