使用StdDeserializer进行Jackson XML反序列化

时间:2018-08-08 11:52:57

标签: java jackson jackson-dataformat-xml

我想用Jackson(jackson-dataformat-xml)对给定的XML文件进行反序列化。有两种方法。第一种是在类上带有一些注释,第二种是使用反序列化器。由于xml文件是深层嵌套的,例如

<a>
  <b>
    <c>
      <d>
       <e>...</e>
       <e>...</e>
      </d>
    </c>
  </b>
</a>

我不想为每个级别创建类并使用反序列化器。当前看起来像这样:

public class ObjDeserializer extends StdDeserializer<Obj> {

    public MetadataDeserializer() {
        this(null);
    }

    public MetadataDeserializer(Class<?> vc) {
        super(vc);
    }

    @Override
    public Obj deserialize(JsonParser jp, DeserializationContext ctxt)
            throws IOException, JsonProcessingException {

        final JsonNode objNode = jp.getCodec().readTree(jp);
        return new Obj(objNode.get("a").get("b").get("c").get("d").findValueAsText("e"));
    }
}

这里的问题是,仅找到第一个e。我需要e的所有值。如何使用反序列化器实现这一目标?我尝试了第一种注释方法,即

@JacksonXmlProperty(localName = "e")
@JacksonXmlElementWrapper(useWrapping = false)
private void unpackEProperties(final JsonNode e) {
   ...
}

,并且每个e都会多次调用该方法,但是由于DOM的深度,因此无法选择此方法。

0 个答案:

没有答案