java - 使用 RestEasy 处理没有“根”元素的 JSON 响应
问题描述
我调用一些 Web 服务(用 Ruby 构建)并得到如下 JSON 响应:
{
"error_code": "02",
"message": "Param not valid",
"field_name": "title"
}
为了在 Java 中建模该响应对象,我尝试使用:
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "response")
public class Response {
private String error_code;
private String message;
private String field_name;
public String getError_code() {
return error_code;
}
public void setError_code(String error_code) {
this.error_code = error_code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getField_name() {
return field_name;
}
public void setField_name(String field_name) {
this.field_name = field_name;
}
}
...并在我的 WS 客户端中读取 WS 调用的响应,我尝试:
Response response = responseWs.readEntity(Response.class);
...但我得到以下异常:
org.jboss.resteasy.plugins.providers.jaxb.JAXBUnmarshalException:javax.xml.bind.UnmarshalException - 有关联的例外: [com.sun.istack.internal.SAXParseException2; columnNumber: 0 意外元素...预期元素是
那是因为我的代码试图处理这样的 JSON 响应对象(带有一些“根”元素):
{
"response":
{
"error_code": "02",
"message": "Param not valid",
"field_name": "title"
}
}
有人知道我该如何解决这种情况吗?
谢谢
解决方案
对我来说,这个片段解决了这个问题:
String responseAsString = responseWs.readEntity(String.class);
ObjectMapper mapper = new ObjectMapper();
JsonNode pathNode = mapper.readTree(responseAsString);
Response response = mapper.convertValue(pathNode, Response.class);
推荐阅读
- asp.net - 当我尝试更改某些内容时,Asp.net 核心没有更新
- jquery - 为什么我不能限制选中复选框的数量?
- html - 显示:弹性和无响应的照片 HTML + CSS
- c# - 如何在 C# 中对重复的查询结果进行分组?
- mysql - 从一个表中查找不存在于另一个表中的记录,或者特定值的总和为 0
- javascript - Webpack 错误堆栈未显示在源映射文件中
- git - “致命:不是 git 存储库(或任何父目录):.git”错误,尽管存在 .git 目录
- javascript - 如何放置 2s并排
- python - 在 pandas Series/DataFrame 上执行多个字符串操作
- sas - DM 命令打开 rwork 库中的最后一个数据集