微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XmlMapper 反序列化器只获取列表的最后一个元素值

如何解决XmlMapper 反序列化器只获取列表的最后一个元素值

我有一个 XML 字符串:

<unit><Labels><label>1.5</label><label>2.1</label></Labels></unit>

反序列化。使用的库是:jackson-dataformat-xml。 我遇到的问题是只提取列表的最后一个元素 2.1。

POJO 类定义如下:

@JacksonXmlRootElement(localName = "unit")
public class UnitModel implements Serializable {

  @JacksonXmlElementWrapper(localName = "Labels")
  @JacksonXmlProperty(localName = "Label")
  private List<LabelModel> labels;
  // normal setters and getters
  @JsonDeserialize(using = LabelDeserializer.class)
  public List<LabelModel> getLabels() {
    return labels;
  }
  
  public void setLabels(List<LabelModel> labels) {
    this.labels = labels;
  }
  
}
@JacksonXmlRootElement(localName = "Labels")
public class LabelModel {

  @JacksonXmlProperty(localName = "Label")
  private String value;
}
public class LabelDeserializer extends JsonDeserializer<List<LabelModel>> {

  @Override
  public List<LabelModel> deserialize(final JsonParser p,final DeserializationContext ctxt)
      throws IOException {
    final ObjectCodec objectCodec = p.getCodec();
    final JsonNode listOrObjectNode = objectCodec.readTree(p);
    final List<LabelModel> result = new ArrayList<>();
    if (listOrObjectNode.isArray()) {
      for (JsonNode node : listOrObjectNode) {
        result.add(objectCodec.treeTovalue(node,LabelModel.class));
      }
    } else {
      result.add(objectCodec.treeTovalue(listOrObjectNode,LabelModel.class));
    }
    return result;
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。