首页 文章

Jackson 混音不被称为

提问于
浏览
0

我已经发布了类似的东西,但我仍然试图解决我的问题 .

谢谢你的支持 .

看起来 Jackson 并没有像现在这样称呼混音,我不知道为什么 .

“元素”是一个不是类的接口 . 它通常用静态工厂调用实例化,如mixin(下面)所示 . 我理解它的方式,当jackson看到界面时:Element.class它应该查找mixin然后执行具有@JsonCreator注释的方法 . 这一切都没有发生 . 如果是,我会看到 Logger 的输出 . 相反,正如人们可以在错误消息中看到的那样(下面的方式), Jackson 试图将我的界面视为一个类而不能 .

为什么我的mixin不工作?

这是混音:

public class ElementMixin {

      private static Logger log = LoggerFactory.getLogger(ElementMixin.class);

        @JsonCreator
        public static Element create() {
            log.error("Element==>");
            return FhirFactory.eINSTANCE.createElement();
        }
       }

这是我如何使用映射器注册它:

ObjectMapper mapper = new ObjectMapper();
    mapper.addMixIn(Element.class, ElementMixin.class);

这就是我运行的方式:

// Instantiate my interface, put some data in and serialize. 
Element ela = FhirFactory.eINSTANCE.createElement();
ela.setId("CBAEL");
StringWriter writer = new StringWriter();
mapper.writeValue(writer, ela);

// Now try to deserialize into a new instance.
StringReader reader = new StringReader(writer.toString());
Element elp = mapper.readValue(reader, Element.class);//Error thrown
assertNotNull(elp);

错误:

com.fasterxml.jackson.databind.JsonMappingException:无法构造fhir.Element的实例,问题:抽象类型要么需要映射到具体类型,要么具有自定义反序列化器,要么在[Source:java中使用其他类型信息进行实例化 . io.StringReader@4fe533ff; com:fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:255)中com.fasterxml的com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1007)中的行:1,列:1] .jackson.databind.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:150)at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3807)at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper .java:2844)gov.nist.forecast.fhir.resources.IndexResourceTest.testParametersJSON(IndexResourceTest.java:173)

1 回答

  • 0

    混合仅关联注释;他们不能也不会添加任何字段或方法 - 不添加字节码生成或操作 . 因此,虽然您可以添加注释来指示目标中已存在的方法(包括静态工厂方法),但是混合中定义的任何内容(除了注释)都将被调用或使用 .

相关问题