Spring MVC 4发送错误400以响应AJAX POST

时间:2018-08-13 21:13:06

标签: spring spring-mvc

我想将ID发送到服务器,并删除ID为DB的记录。 我的ajax是:

var data = {
                id: 500
            };

                $.ajax({
                    url: 'delete',
                    method: 'POST',
                    contentType: 'application/json',
                    cache: false,
                    processData: false,
                    data: JSON.stringify(data),
                    success: function (res) {
                        showAlert(res.type, res.message);
                        if (res.type == 'success') {
                            row.delete();
                        }
                    }
                })

我的控制器是:

@ResponseBody
@PostMapping("/delete")
public Alert delete(@RequestParam("id") int id) {
    Alert alert = new Alert(Alert.TYPE_WARNING, Message.get("canNotDelete"));
    if (Service.delete(id)) {
        alert.type = Alert.TYPE_SUCCESS;
        alert.message = Message.get("successDelete");
    }
    return alert;
}

但是服务器发送错误400。

1 个答案:

答案 0 :(得分:1)

您正在将query string(应该由@RequestParam解析)和post data(应该主要由{{1 }})。因此,您的客户发送的内容如下:

@RequestBody

服务器希望收到以下请求:

POST /delete
Content-Type: application/json

{
    "id": 500,
}

它们是不同的,而POST /delete?id=500 解析形式为以下形式的帖子数据:

RequestParam

它不会处理JSON数据。因此,至少有三种解决方案:

  1. 摆脱JSON正文,并将ID作为查询字符串或路径参数传递。然后,您可以分别通过POST /delete Content-Type: application/x-www-urlencoded id=500 @RequestParam获取ID。无需更改服务器代码即可完成。
  2. 以网址格式编码发送请求数据。无需更改服务器代码。在客户端中,请勿对数据进行json处理并删除内容类型设置。
  3. 定义一个DTO以将整个请求主体作为Java对象获取。您将更改控制器代码,例如:

    @PathParam