4

我创建了一个 Spring MVC Web 应用程序。

该应用程序对控制器进行了几次调用。这些电话是关闭/打开/结束游戏。

我使用 Ajax 进行这些调用,因此我可以处理页面顶部的响应。

ajaxPost = function (url, action, id, onSuccess, onError) {
    $.ajax({
        type: "POST",
        url: url + "?" + action + "=" + id,     
        success: function(response) {
            if(onSuccess !== null) {
                onSuccess(response);
            }
        },                                      
        error: function(e) {
            if(onError !== null) {
                onError(e);
            }                           
       }                
    });
};

我的问题是我对 Ajax 请求使用“POST”,这是正确的,还是应该是“PUT”?

我的控制器有一个默认 URL,我使用 param 属性来决定调用哪个方法,因为我在页面上有很多按钮。

@RequestMapping(params = "open", method = RequestMethod.POST)

@RequestMapping(params = "close", method = RequestMethod.POST)

我对这些电话使用“POST”并不满意。也许它应该是'PUT'......

有什么建议么?有关系吗?

4

3 回答 3

9

这取决于您的请求应该做什么。因此,没有一般规则应该使用一个而不是另一个,它们有不同的用例。

POST用于创建记录。
PUT用于更新现有记录(或将记录放在指定位置/id)。
有关定义,请参阅此维基百科文章

需要注意的一点是 PUT 应该是幂等的,多次执行相同的 PUT 请求在理想情况下应该产生与执行单个 PUT 请求相同的结果。但是,POST 不是幂等的,因此执行多个 POST 请求应该(或将)创建多个新记录。

因此,在阅读完本文后,您应该检查您的方法的作用,并选择相应的请求方法。

于 2013-06-13T10:48:47.823 回答
8

PUT 和 POST 都可能创建新记录;PUT 还可以更新/更改现有记录。

POST 和 PUT 之间的区别在于 PUT 期望使用它的 ID 来处理记录,以便服务器知道在创建(或更新)记录时使用什么 ID,而 POST 期望服务器为记录生成一个 ID 并创建记录后将其返回给客户端。

因此,一个 POST 作为一个集合被寻址到资源:POST /resource,而 PUT 被寻址到集合中的单个项目:PUT /resource/1

于 2013-06-13T10:49:44.977 回答
1

使用 POST。始终使用 POST,除非您绝对确定您的托管系统正确支持 PUT。

于 2013-06-13T10:49:29.037 回答