【问题标题】:XML to JSON | Spring boot | JacksonXML 转 JSON |弹簧靴 |杰克逊
【发布时间】:2021-05-28 16:00:01
【问题描述】:

我正在开发一个 Springboot 项目并从 Rest API 获取数据。响应是 XML 格式,我在将其转换为 JSON 时遇到了困难

XML 响应:

<StoreInfo>
    <Store Number="1" NCPDPID="0411"/>
    <Store Number="3" NCPDPID="1132"/>
    <Store Number="4" NCPDPID="0407"/>
</StoreInfo>

我创建的 JSON 类是:

public class IDResponse {

  private List<IDInfo> StoreInfo;
}

public class IDInfo {

  private List<Store> Store;
}

public class Store {

  private Integer Number;
  private String ID;
}

获取和转换的代码:

import com.fasterxml.jackson.dataformat.xml.XmlMapper;

ResponseEntity<String> response = restTemplate.exchange(requestUrl,
            HttpMethod.GET, entity,
            String.class);

XmlMapper xmlMapper = new XmlMapper();
responseData = xmlMapper.readValue(response, IDInfo.class);

我得到的异常

  • 方法抛出 'com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException' 例外。
  • 无法识别的字段“Store”(类 com.walmart.datamodel.location.IDResponse),未标记为可忽略

如何解决这个问题?

【问题讨论】:

  • xmlMapper.readValue(response, IDInfo.class);?不应该是IDResponse
  • @Turo,我试过了,但没用

标签: json xml spring-boot jackson


【解决方案1】:

Java 类中不应使用大写名称。 Number 和 Id 是属性,所以你应该使用 Annotatiaons 来引导 jackson:

@JacksonXmlRootElement(localName = "StoreInfo")
public class IDResponse {


    @JacksonXmlProperty(localName = "Store")
    @JacksonXmlCData
    @JacksonXmlElementWrapper(useWrapping = false)
    private List<Store> storeInfo;

    public List<Store> getStoreInfo() {
        return storeInfo;
    }

    public void setStoreInfo(List<Store> storeInfo) {
        this.storeInfo = storeInfo;
    }

}

存储元素

public class Store {

    @JacksonXmlProperty(localName="Number")
    private Integer number;
    @JacksonXmlProperty(localName="NCPDPID")
    private String id;

    public Integer getNumber() {
        return number;
    }

    public void setNumber(Integer number) {
        this.number = number;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

}

不需要 IDInfo 类。

【讨论】:

    猜你喜欢
    • 2017-08-18
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2021-12-29
    • 2015-10-19
    • 1970-01-01
    • 2017-12-04
    相关资源
    最近更新 更多