我究竟何时应该在春季使用RequestMethod.PUT?

时间:2018-10-31 14:23:00

标签: java spring spring-boot

虽然PUTPOST之间的阅读差异,但我遇到了这样的回答:

  

HTTP PUT应该接受请求的主体,然后将其存储在URI标识的资源中。

     

HTTP POST更通用。应该在服务器上启动一个动作。该操作可能是将请求正文存储在URI标识的资源上,或者可能是其他URI,或者可能是其他操作。

现在,通过this tutorial时,我发现了这一点:

@RequestMapping(value = EmpRestURIConstants.DELETE_EMP, method = RequestMethod.PUT)
public @ResponseBody Employee deleteEmployee(@PathVariable("id") int empId) {
    logger.info("Start deleteEmployee.");
    Employee emp = empData.get(empId);
    empData.remove(empId);
    return emp;
}

我在考虑是否要使用PUT,我应该使用@RequestBody。但这似乎并非如此。上面的方法似乎非常像PUT使用GET,对不对?还是我在这里什么都没有?

问题1。这些方法的明确目的是什么,或者至少在使用某些方法“ 不能”时?

第二季度。就像,如果我使用的是GET,那么我就不能使用@RequestBody,因为GET的请求中没有任何内容,我被留下了仅使用@RequestParam@PathVariable以及PUTPOST就可以全部使用。而且,无论使用哪种方法,都可以返回@ResponseBody。如果所有这些猜测都是正确的,那么他们的官方文件是否解释了所有这些限制,包括其他方法的限制?

2 个答案:

答案 0 :(得分:0)

因此,我从未对此进行更多的思考,并且几乎总是使用 GET POST ,但是在阅读此blog之后,似乎清除何时在 POST 上使用 PUT 。在这里,我将引用博客。

  

PUT方法有什么作用?

     

PUT方法完全替换了当前存在的任何内容。   目标网址以及其他内容。使用这种方法,您可以创建一个新的   资源或覆盖现有的,只要您知道确切的   请求URI。一个用于创建新PUT方法的示例   资源类似于以下内容:

PUT /forums/<new_thread> HTTP/2.0
Host: https://yourwebsite.com/
     

其中的实际名称或ID号   线。或者,使用PUT方法覆盖现有的   资源可能看起来像这样:

PUT /forums/<existing_thread> HTTP/2.0
Host: https://yourwebsite.com/
     

简而言之,PUT方法用于在以下位置创建或覆盖资源   客户端已知的特定URL。

     

POST方法有什么作用?

     

HTTP POST方法用于将用户生成的数据发送到Web   服务器。例如,当用户评论一个   论坛或他们上传个人资料图片的情况。 POST方法也应该   如果您不知道新网址的具体网址,请使用   创建的资源应驻留。换句话说,如果有新的论坛主题   创建并且未指定线程路径,则可以使用   像这样:

POST /forums HTTP/2.0
Host: https://yourwebsite.com/

结论

因此,在阅读本文并查看示例之后,就很有意义了为什么使用 PUT 而不是 POST 了,这与您的URL有关。由于您使用的是@PathVariable,这意味着您完全了解确切的Request-URI。否则,使用 POST 会更有意义。

答案 1 :(得分:0)

以下是汇总了主要HTTP方法的建议返回值以及资源URI的表

enter image description here