当前位置: 首页 > 知识库问答 >
问题:

使用SpringMVC将JSON数组转换为java列表

姚航
2023-03-14

我的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元素都用双引号和括号填充。此列表参数为:

[["15", "21"]]

例如,第一个元素看起来像:

["15"

我不希望解析列表的每个字符串元素。

我还尝试删除了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) {

其中SelectedDS是一个JavaScript数组。

但现在我明白了:

POST http://localhost:8080/todonotes/tasks/removeTask 415 (Unsupported Media Type) 

共有3个答案

轩辕翰
2023-03-14

尝试给请求参数一个显式的名称:

$.post("/todonotes/tasks/removeTask", {selectedIds: selectedIds},...

更新。您还可以尝试将整个请求数据对象字符串化为JSON:

var data = {selectedIds: selectedIds};
$.post("/todonotes/tasks/removeTask", JSON.stringify(data),...
叶德本
2023-03-14

尝试以下操作,无需更改控制器的方法签名或创建用于保存ID的对象。

$.post("/todonotes/tasks/removeTask", {selectedIds: selectedIds.join(',')},function(e) {  
}, "json");

通过这种方式,您将发送您的ID,如selectedds:id1、id2、id3,如果您将请求参数声明为String[]列表,则控制器希望它们是这样的

长孙骏
2023-03-14

我知道你不需要使用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)
 类似资料:
  • 问题内容: 我从服务器得到一个 json数组: 我想使用gson将上面的json数据转换为Java 对象。我尝试了以下方法: 首先,我创建了一个 Person.java 类: 然后,在服务类中,我执行了以下操作: 我收到异常 java.lang.ClassCastException:java.util.LinkedHashMap无法强制转换为Person 。如何摆脱我的问题?我只想将json数组转

  • 问题内容: 那是我的JSON数组,但我想将fruits字符串中的所有值转换为Python列表。正确的做法是什么? 问题答案: 您拥有了所需的一切。将是一个字典,将是一个列表

  • 问题内容: 我有一个这样的清单: 并在这样的对象上: 如何将“列表”分配给“ myMatrix”? 我不想遍历列表并将元素逐个分配给MyMatrix,但我想尽可能地直接分配它(使用oppurtune修改)。谢谢 问题答案: 您可以使用。 Java文档

  • 我无法将JSON数组转换为数组。以下是我使用的JSON: 类为: 并且尝试以下代码会导致: com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_OBJECT但BEGIN_ARRAY在第1行第2列路径$ 代码:

  • 问题内容: 我有一个包含几个整数的数组。我已经向数组添加了一些值,但是现在我需要通过jQuery的方法将此数组发送到页面。如何将其转换为JSON对象进行发送? 问题答案: 向后兼容的脚本:https : //github.com/douglascrockford/JSON- js/blob/master/json2.js 并致电: 注意: JSON对象现在是大多数现代Web浏览器(IE 8及更高版

  • 我得到一个json数组从服务器: 我想使用gson将上述json数据转换为Java