检查 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 将包含人员列表,您可以简单地检查大小。
为了检查 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 将包含人员列表,您可以简单地检查大小。