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

Check if REST Response contains empty List

为了检查 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"/>

如果没有人。

我在 Java 中使用 Jersey 执行 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());
    }
}

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

有更好的方法吗? 也许创建一个 PersonListEntity 可以包含 Persons 并做这样的事情:

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

甚至可以有一个 PersonListEntity 可以包含多个甚至没有 Persons 吗?

不幸的是,改变我的 RESTful 资源的行为对我来说不是一个选择。

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