我在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请求?