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 (将#修改为@)