jquery - 使用 Spring MVC 将 JSON 数组转换为 java List<String>

标签 jquery json spring-mvc

我的 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");

现在我的 Controller 方法被调用,但每个 List 元素都用双引号和括号填充。这是列表参数:

[["15", "21"]]

所以例如第一个元素如下所示:

["15"

我不想解析 List 的每个 String 元素。

我还尝试删除 JSON.stringify 转换,但我的 Controller 甚至没有被调用。有了这个我得到了:

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;
    }
}

然后我修改了我的 Controller 方法签名:

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) 

最佳答案

据我所知,您不需要使用 JSON.stringify(), 您的代码可以如下所示:

var ids = []; 
$("input:checked").each(function() {
    ids.push(this.id);
});

$.post("/todonotes/tasks/removeTask", $.param({'id': ids}, true),function(e) {
}, "json");

在服务器端,您应该指定以下值:

public methodName(@RequestParam("id") List<String> selectedIds)

关于jquery - 使用 Spring MVC 将 JSON 数组转换为 java List<String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15587179/

相关文章:

spring - 我的 Autowiring 数据源在 Spring 中返回 null,这是怎么回事?

javascript - jquery绑定(bind)点击和悬停,如何检查是否点击

javascript - 使用 JSON 和 AJAX 从数据库中提取信息

java - Spring in Practice 书第 1 章中关于单例 bean 不维护状态所需的揭秘

javascript - AngularJS:ng-repeat 不显示 JSON

iphone - 在新 iPhone 应用程序和新 Rails 3 后端之间移动对象图

java - Spring MVC JSP - 包含另一个具有动态数据的 JSP

javascript - Jasmine 错误 - 预期事件点击已在 #DIV_ID 上触发

javascript - 如何在不使用 jquery 的情况下在按钮单击时加载更多或显示更少的 div/卡片

jquery - 无法使用 jquery 的 .css() 在 mozilla 和 IE 中获取边框属性