具有Jackson的接口类型的POJO反序列化特性

时间:2018-12-29 11:34:34

标签: java jackson

我将反序列化json转换为POJO类时遇到问题,如下所示:

@Data
public class Foo {
   private String fieldA;
   private String fieldB;
   private IBar fieldC; 
}

IBar是一个为某些类定义吸气剂的接口。我发现的解决方案之一是使用@JsonDeserialize(as = BarImpl.class),其中BarImpl将实现IBar接口。问题在于实现该接口的类(例如BarImpl)位于另一个我无法从当前模块访问的Maven模块中,因此我无法在该批注中使用其中一个此类。您能告诉我是否还有其他解决方案?

谢谢你的建议。

1 个答案:

答案 0 :(得分:0)

您确定要反序列化吗?如果Jackson能够为您创建Java对象,则需要接口的具体实现。

  • 反序列化= Json字符串-> Java对象
  • 序列化= Java对象-> Json字符串

序列化时,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);