java - 检查 REST 响应是否包含空列表

标签 java rest jersey-client

为了检查 Person 是否存在,我使用 RESTful 资源,通过 GET 访问该资源,如下所示:

GET http://api.my-site.com/persons?id=254

例如,我可以获得以下响应:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persons id="http://api.my-site.com/persons" size="2" offset="0" total="2">
    <person>
        <id>http://api.my-site.com/person/1</id>
    </person>
    <person>
        <id>http://api.my-site.com/person/2</id>
    </person>
</persons>

如果有人或我收到此回复:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persons id="http://api.my-site.com/persons" size="0" offset="0" total="0"/>

如果没有人。

我使用 Jersey 在 Java 中执行 GET,如下所示:

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
... 

boolean checkIfPersonExist(String uri){
    Client client = Client.create();
    WebResource webResource = client.resource(uri);

    ClientResponse response = webResource
            .accept("application/xml")
            .get(ClientResponse.class);
    String output = response.getEntity(String.class);

现在我想检查我的 Response 中是否有 Persons。目前,我只是检查 total="0" 是否在我的 Response 内。

    if (response.getStatus() == OK) {
        return !output.contains("total=\"0\"");
    } else {
        throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
    }
}

这可行,但我对此不满意,因为它并没有真正检查是否有人,而是检查该字符串是否存在。

有更好的方法吗? 也许创建一个可以包含 PersonsPersonListEntity 并执行如下操作:

PersonListEntity output = response.getEntity(PersonListEntity.class);

是否有可能拥有一个可以包含多个甚至不包含 PersonPersonListEntity

不幸的是,更改 RESTful 资源的行为对我来说是不可能的。

最佳答案

您可以使用Jersey's XML support,而不是查看响应中的原始字符串。自动解析它并将其转换为 POJO。您的 POJO 将包含人员列表,您只需检查大小即可。

关于java - 检查 REST 响应是否包含空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30482401/

相关文章:

java - App Engine - 部署新版本错误 500(由于 session )

java - 集合上的线程安全迭代

android - 使用 Retrofit 发布正文 JSON

rest - 为什么 REST 动词不一定对应于 CRUD 操作?

jersey - ApacheConnector 不处理在 WriterInterceptor 中设置的请求 header

java - 获取 java.net.ConnectException : Connection refused

java - 模拟 Android REST 连接的最佳方式

java - Android appcompat v7 错误

angularjs - 使用 Laravel 将部分 html 模板加载到 Angular 应用程序中

java - Jersey 2 - 获取客户端上的基本 URI