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

时间:2015-05-27 12:26:11

标签: 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);

现在我想检查Persons中是否有Response。目前我只检查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,其中可以包含多个{偶像{}}?

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

1 个答案:

答案 0 :(得分:1)

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