我想用杰克逊反序列化一个 JSON 对象。因为目标是一个接口,所以我需要指定应该使用哪个实现。
此信息可以使用@JsonTypeInfo-Annotation 存储在 JSON-Object 中。但我想在源代码中指定实现,因为它总是一样的。
这可能吗?
我想用杰克逊反序列化一个 JSON 对象。因为目标是一个接口,所以我需要指定应该使用哪个实现。
此信息可以使用@JsonTypeInfo-Annotation 存储在 JSON-Object 中。但我想在源代码中指定实现,因为它总是一样的。
这可能吗?
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("CustomModel", Version.unknownVersion());
SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver();
resolver.addMapping(Interface.class, Implementation.class);
module.setAbstractTypes(resolver);
mapper.registerModule(module);
如果您只有单个接口实现,还有另一种方法可以使用。
public class ClassYouWantToDeserialize {
@JsonDeserialize(as = ImplementationClass.class)
private InterfaceClass property;
...
}
这个问题在不久前得到了回答,但我想给你另一个不需要调整 ObjectMapper 的选项,而且比 @JsonTypeInfo 注释要简单得多。
您也可以 @JsonDeserialize(as = ImplementationClass.class)
在界面上使用,所有引用都将以相同的方式反序列化。
请注意,如果您的实施类之一是枚举,则您可能还需要@JsonFormat(shape = JsonFormat.Shape.OBJECT)
枚举。