我想用Jackson反序列化JSON-Object。因为目标是一个接口,我需要指定应该使用哪个实现。
可以使用@JsonTypeInfo-Annotation将此信息存储在JSON-Object中。但我想在源代码中指定实现,因为它始终是相同的。
这可能吗?
答案 0 :(得分:33)
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);
答案 1 :(得分:19)
如果您只有单个接口实现,还有另一种方法可行。
myData[age = 10, Z = 7, var = 'waveln')
这个问题很久以前就得到了解答,但我想给你另一个选项,它不需要调整ObjectMapper,也比@JsonTypeInfo注释更简单。
答案 2 :(得分:5)
您也可以在界面上使用@JsonDeserialize(as = ImplementationClass.class)
,所有引用都将以相同的方式反序列化。
注意,如果您的某个实现类是枚举,那么枚举上也可能需要@JsonFormat(shape = JsonFormat.Shape.OBJECT)
。