Jackson - 如何为接口引用的反序列化指定单个实现?
2022-09-01 04:12:41
我想用 Jackson 反序列化 JSON 对象。因为目标是一个接口,所以我需要指定应该使用哪个实现。
此信息可以使用@JsonTypeInfo注释存储在 JSON 对象中。但我想在源代码中指定实现,因为它总是相同的。
这可能吗?
我想用 Jackson 反序列化 JSON 对象。因为目标是一个接口,所以我需要指定应该使用哪个实现。
此信息可以使用@JsonTypeInfo注释存储在 JSON 对象中。但我想在源代码中指定实现,因为它总是相同的。
这可能吗?
使用 SimpleAbstractTypeResolver:
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注释要简单得多。