我想将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。
答案 0 :(得分:1)
您正在将query string(应该由@RequestParam
解析)和post data(应该主要由{{1 }})。因此,您的客户发送的内容如下:
@RequestBody
服务器希望收到以下请求:
POST /delete
Content-Type: application/json
{
"id": 500,
}
它们是不同的,而POST /delete?id=500
将解析形式为以下形式的帖子数据:
RequestParam
它不会处理JSON数据。因此,至少有三种解决方案:
POST /delete
Content-Type: application/x-www-urlencoded
id=500
或@RequestParam
获取ID。无需更改服务器代码即可完成。定义一个DTO以将整个请求主体作为Java对象获取。您将更改控制器代码,例如:
@PathParam