我在 Jersey 2.x 中有以下服务器端代码:
@Path("/store/remove/from/group")
@DELETE
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
public Response removeStoresFromGroup(@FormParam("storeName") List<String> storeNames, @FormParam("groupName") String groupName) {
//......
}
在客户端,我想使用 Jersey 2.x 客户端向上述 Web 服务发送删除请求。然而,从文档泽西岛客户端API http://docs.oracle.com/javaee/7/api/javax/ws/rs/client/WebTarget.html,我没有找到如何在 DELETE 请求中包含以下数据:
WebTarget webTarget = client.target("/store/remove/from/group");
MultivaluedMap<String, String> formData = new MultivaluedHashMap<String, String>();
List<String> storeName = new ArrayList<String>();
storeName.add("Store1");
storeName.add("Store2");
storeName.add("Store3");
formData.addAll("storeName", storeName);
formData.add("groupName", "Group A");
Response response = webTarget.request().accept(MediaType.TEXT_PLAIN).delete(); //The delete() method doesn't take any entity body in the request.
从 Jersey 客户端 API 中,SyncInvoker http://docs.oracle.com/javaee/7/api/javax/ws/rs/client/SyncInvoker.html类不支持delete
以实体主体作为参数的方法。所以我只能使用 POST 或 PUT 将数据发送到服务器,如下所示(但不能用于 DELETE):
Response response = webTarget.request().accept(MediaType.TEXT_PLAIN).post(Entity.form(formData));
但我想使用 DELETE 请求,因为该请求正在删除一些资源。如何通过 Jersey 客户端发送包含某些实体数据的 DELETE 请求?