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

2022-09-01 04:12:41

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

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

这可能吗?


答案 1

使用 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);

答案 2

如果您只有单个接口实现,则还有另一种方法有效。

public class ClassYouWantToDeserialize {
    @JsonDeserialize(as = ImplementationClass.class)
    private InterfaceClass property;
...
}

这个问题在一段时间前已经回答过了,但我想给你另一个选项,不需要调整ObjectMapper,而且比@JsonTypeInfo注释要简单得多。