在 Spring 中,我应该在什么情况下使用 RequestMethod.PUT?

17 浏览
0 Comments

在 Spring 中,我应该在什么情况下使用 RequestMethod.PUT?

这个问题已经在这里有答案:

HTTP中POST和PUT的区别是什么?

在阅读 PUTPOST 的区别时,在这个回答中我看到了这样的说法:

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

HTTP POST更加通用。它应该在服务器上启动一个动作。该动作可以是将请求数体存储在由URI标识的资源中,也可以是一个不同的URI,或者是一个不同的操作。

现在,在阅读这个教程时,我发现了以下内容:

@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。但实际情况并非如此。而上述方法似乎非常像GET,对吧?还是我漏看了什么?

Q1. 这些方法的确切目的是什么,或者至少在什么情况下某些方法不能使用?

Q2. 是否正确理解,如果我使用GET,那么我不能使用@RequestBody,因为GET请求中没有请求主体,我只能使用@RequestParam@PathVariable。而PUTPOST可以使用所有这些吗?而且不管使用哪种方法,都可以返回@ResponseBody。如果我所有的猜测都是正确的,那么是否有官方文档解释所有这些限制,包括其他方法?

admin 更改状态以发布 2023年5月21日
0
0 Comments

以下是一张表格,总结了主要HTTP方法与资源URI的推荐返回值

enter image description here

0
0 Comments

所以我之前从来没有深入思考过这个问题,并且几乎总是使用GETPOST,但是在阅读了这篇博客之后,似乎更清楚了何时使用PUT而非POST。这里我将引用博客中的内容。

PUT方法是做什么的?

PUT方法完全替换目标URL中存在的任何内容为其他内容。利用此方法,您可以创建新的资源或覆盖现有的资源,只要您知道确切的请求URI即可。PUT方法用于创建新资源的示例如下:

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

其中x将是线程的实际名称或ID号码。或者,用于覆盖现有资源的PUT方法可能如下所示:

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

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

POST方法是做什么的?

HTTP POST方法用于将用户生成的数据发送到Web服务器。例如,当用户在论坛上发表评论或上传个人资料图片时,使用POST方法。如果您不知道新创建的资源应该驻留在哪个特定URL上,则还应使用POST方法。换句话说,如果创建了新的论坛线程但未指定线程路径,则可以使用以下内容之类的东西:

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

结论

在阅读这篇文章并查看你的示例后,你为什么要使用PUT而不是POST就有了很清楚的解释,这与你的URL有关。因为你使用了一个@PathVariable,这意味着你完全了解确切的请求URI。否则,使用POST更合理。

0