【发布时间】:2014-10-03 11:46:36
【问题描述】:
我在 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 服务发送删除请求。但是,从Jersey client API的文档中,我没有找到如何在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 类不支持将实体主体作为参数的 delete 方法。所以我只能使用 POST 或 PUT 将数据发送到服务器,如下所示(但不能用于 DELETE):
Response response = webTarget.request().accept(MediaType.TEXT_PLAIN).post(Entity.form(formData));
但我想使用 DELETE 请求,因为该请求正在删除一些资源。如何通过 Jersey 客户端发送带有某些实体数据的 DELETE 请求?
【问题讨论】:
-
OT 但通常您不需要发送带有 DELETE because 的实体“DELETE 方法请求源服务器删除由 Request-URI 标识的资源”。您的方法引用听起来更像是更新引用然后删除资源。
-
有时候如果我想删除一些满足一定条件的数据,我需要在DELETE请求的实体体中传入一些参数。