我将反序列化json转换为POJO类时遇到问题,如下所示:
@Data
public class Foo {
private String fieldA;
private String fieldB;
private IBar fieldC;
}
IBar
是一个为某些类定义吸气剂的接口。我发现的解决方案之一是使用@JsonDeserialize(as = BarImpl.class)
,其中BarImpl
将实现IBar
接口。问题在于实现该接口的类(例如BarImpl
)位于另一个我无法从当前模块访问的Maven模块中,因此我无法在该批注中使用其中一个此类。您能告诉我是否还有其他解决方案?
谢谢你的建议。
答案 0 :(得分:0)
您确定要反序列化吗?如果Jackson能够为您创建Java对象,则需要接口的具体实现。
序列化时,Jackson将使用对象的运行时类,因此它将使用实际的实现,而不是尝试使用接口。如果要自定义此选项,则可以为接口添加序列化器。您需要确定要写的内容。
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(IBar.class, new JsonSerializer<IBar>() {
@Override
public void serialize(IBar value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField("fieldName", value.getFieldName());
gen.writeEndObject();
}
});
objectMapper.registerModule(module);