我的 javascript 代码中有一个字符串列表,我通过 JQuery 将其发送到基于 REST 的服务,如下所示:
var ids = [];
$("input:checked").each(function() {
ids.push(this.id);
});
var selectedIds = JSON.stringify(ids);
$.post("/todonotes/tasks/removeTask", selectedIds,function(e) {
}, "json");
如您所见,我将 javascript 数组转换为 JSON 数组。
现在,在服务器端,我使用 Spring MVC 和 Jackson 来接收和解析输入 JSON:
@RequestMapping(value="/tasks/removeTask", method = RequestMethod.POST)
public @ResponseBody String removeTask(@RequestBody List<String> selectedIds) {
...
}
但我总是得到:
HTTP Status 415 -
--------------------------------------------------------------------------------
type Status report message
description The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.
我试图从 JSON 对象中删除引号,也尝试使用@RequestParam
但没有成功。
根据 OQJF 建议更新:
我修改了我的帖子请求如下:
$.post("/todonotes/tasks/removeTask", {selectedIds: selectedIds},function(e) {
}, "json");
现在我的控制器方法被调用,但每个List
元素都填充了双引号和括号。这是 List 参数:
[["15", "21"]]
所以例如第一个元素看起来像:
["15"
我宁愿不String
解析List
.
我也尝试删除JSON.stringify
转换,但我的控制器甚至没有被调用。有了这个我得到:
HTTP Status 400 - Required List parameter 'selectedIds' is not present
--------------------------------------------------------------------------------
type Status report
message Required List parameter 'selectedIds' is not present
description The request sent by the client was syntactically incorrect.
更新
我试图创建一个对象来保存我的 id,如下所示:
public class TaskIdHolder {
private String[] selectedIds;
public String[] getSelectedIds() {
return selectedIds;
}
public void setSelectedIds(String[] selectedIds) {
this.selectedIds = selectedIds;
}
}
然后我修改了我的控制器方法签名:
public @ResponseBody String removeTask(@RequestBody TaskIdHolder selectedIds) {
我的 JSON 请求如下所示:
{"selectedIds":["15"]}
我还按照 Andrei 的建议修改了我的 Jquery 代码:
var data = JSON.stringify({selectedIds:selectedIds});
$.post("/todonotes/tasks/removeTask", data, function(e) {
其中 selectedIds 是一个 JavaScript 数组。
但现在我得到:
POST http://localhost:8080/todonotes/tasks/removeTask 415 (Unsupported Media Type)