当前位置: 首页 > 知识库问答 >
问题:

使用RestEasy处理不带“root”元素的JSON响应

穆毅然
2023-03-14

我调用了一些web服务(用Ruby构造)并得到如下JSON响应:

{
    "error_code": "02",
    "message": "Param not valid",
    "field_name": "title"
}
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 
 - with linked exception: 
[com.sun.istack.internal.SAXParseException2; columnNumber: 0 unexpected element ... Expected elements are

这是因为我的代码试图像这样处理JSON响应对象(带有一些'root'元素):

{
    "response":
    {
        "error_code": "02",
        "message": "Param not valid",
        "field_name": "title"
    }       
}

谢谢

共有1个答案

阮健
2023-03-14

从您发布的代码段中

Response Response=responseWs.ReadEntity(

我建议您为实体对象使用其他名称。response类也由jaxrs框架本身使用。

我假设您正在使用ResteasyClient调用这个(外部)服务来接收JSON。如果了解到来自该服务的响应是在JSON中,那么您可以使用JSON(jackson)编组器/反编组器而不是JAXB。假设您的类路径上已经有“resteasy-client”依赖项可用。此依赖项的maven形式如下所示:

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-client</artifactId>
    <version>3.0.19.Final</version>
</dependency>

  1. 将DTO的名称更改为ExternalServiceResponse
  2. 执行Get请求时,显式指定响应介质类型
Response response = target.request(MediaType.APPLICATION_JSON).get();
ExternalServiceResponse result = response.readEntity(ExternalServiceResponse.class)
public class ExternalServiceResponse implements Serializeable {

    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;
    }

}
 类似资料:
  • 我在返回带有指定对象根名的对象列表时遇到了一些麻烦。我试过几种不同的方法。我确信我正在做一件像往常一样难以置信的愚蠢的事情,我很感激任何帮助。 这是我的东西

  • 问题内容: 我有一个页面作为HtmlUnit中的UnexpectedPage返回,响应为JSON。我可以使用HTMLUnit进行解析还是需要一个额外的库? 问题答案: HtmlUnit不支持它。它最多可以执行JS函数。您需要事先检查返回的响应是否匹配,然后使用合适的工具进行解析。Google Gson 在此方面很有用。 如果JSON结构是事先已知的,则您甚至可以使用Gson将其转换为完全有价值的J

  • 问题内容: 对不起,我的英语不好 :) 我在iOS应用程序的Swift中通过Alamofire解析JSON响应时遇到问题。我编写了一个函数来返回JSON响应字符串。请求和响应处理我做Alamofire和JSON处理我做SwiftyJSON。首先,我声明一个名为 jsonString的变量 ,其值为 test 。然后,我向REST服务发出请求,并通过单击按钮获得JSON响应。我想使用函数 ping(

  • 问题内容: 我在弄清楚如何从jQuery $ .post()请求中正确读取JSON响应时遇到了麻烦。 在下面的jQuery代码中,我根据对应的“ color_entry_id”(用作键)从DOM中的元素填充字符串的关联数组: 然后,我发出POST请求,发送“ image_links”数组: 另外,如上所示,我尝试遍历响应数组并输出要成为字符串的每个项目,但是我只得到“ [object Object

  • 对于页面的元素,在DOM编程中可以通过各种查询、修改手段进行管理,非常麻烦。jQuery提供了一整套的方法来处理页面的元素。包括元素的内容、复制、移动和替换等。本节将介绍一些常用的内容。 1.直接获取、编辑内容。 在jQuery中,主要是通过html()和text()两个方法来获取和编辑页面的内容。其中html()相当于获取节点的innerHTML属性,添加参数html(text),则为设置inn

  • 我的API有很多db调用,因此我需要使用或处理几乎每个数据库调用,但是有没有比这更好的方法 每次我要从数据库中检索用户行时?