json - XML 转 JSON | 弹簧靴 | 杰克逊
问题描述
我正在开发一个 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 类),未标记为可忽略
如何解决这个问题?
解决方案
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 类。
推荐阅读
- kubernetes - Kubeadm 加入失败:无法请求集群信息
- rust - 为什么 TCP 回显服务器的异步版本使用的内存是同步版本的 50 倍?
- c++ - 为什么我在使用不同语言的相同代码上得到不同的答案?
- pytorch - 从检查点加载模型不起作用
- lua - LuaForWindows,更新 Lua
- javascript - chartjs update() 没有更新
- rest - REST:如何删除一个资源并选择删除另一个资源?
- php - axios,无法将数据从反应组件传递到 PHP 文件
- teradata - Terdata 使用井号作为字段名称
- reactjs - 表达式大小超过 Google AMP 状态中的最大值