我目前正在使用Jersey Framework(JAX-RS实现)来构建RESTful Web服务。项目中的Resource类已经实现了标准的HTTP操作 - GET,POST&删除。我试图弄清楚如何从客户端向这些方法发送请求参数。
对于GET,它将在查询字符串中(使用@QueryParam
提取),POST将是与请求正文一起发送的名称/值对列表(使用@FormParam
提取)。我使用HTTPClient测试它们并且工作正常。对于DELETE操作,我没有找到关于参数类型/格式的任何结论性答案。 DELETE操作是否接收查询字符串中的参数(使用@QueryParam
提取)或正文(使用@FormParam
提取)?
在Web上的大多数DELETE示例中,我观察到使用@PathParam
注释进行参数提取(这将再次来自查询字符串)。
这是将参数传递给DELETE方法的正确方法吗?我只是想在这里小心,以便我不违反任何REST原则。
答案 0 :(得分:18)
是的,由您决定,但是当我获得REST意识形态时,DELETE URL应该删除GET URL请求返回的内容。例如,如果
GET http://server/app/item/45678
返回ID为45678的项目,
DELETE http://server/app/item/45678
应删除它。
因此,我认为使用PathParam比使用QueryParam更好,因为QueryParam可以用来控制工作的某些方面。
DELETE http://server/app/item/45678?wipeData=true
答案 1 :(得分:12)
DELETE方法应使用URL来标识要删除的资源。这意味着您可以使用路径参数或查询参数。 除此之外,就REST而言,构建URL没有正确和错误的方法。
答案 2 :(得分:3)
你可以这样使用
@DELETE
@Path("/person/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response deletePerson(@PathParam("id") String id){
Result result = new Result();
try{
persenService.deletePerson(id);
result.setResponce("success");
}
catch (Exception e){
result.setResponce("fail");
e.printStackTrace();
}
return Response.status(200).entity(result).build();
}
答案 3 :(得分:0)
@QueryParam
将是正确的方法。 @PathParam
仅适用于任何url参数之前的内容('?'之后的内容)。 @FormParam
仅适用于具有表单内容类型的已提交Web表单。