我正在尝试使用Ajax和JSON将数据传递给我的控制器。
我有一个HTML表格,我必须将该表的多个坐标发送到我的控制器。所以我创建了一个包含这种匿名对象的Javascript数组:
{
DAY: someIndex,
HOUR: someOtherIndex
}
并让这个数组被称为coordinates
,我将它序列化为:
JSON.stringify(coordinates)
然后在ajax调用(type: POST
)中我使用了data: JSON.stringify(coordinates)
。
在我准备好的文件中,我使用了:
$.ajaxSetup({
headers : {
Accept : "application/json; charset=utf-8"
}
});
我的控制器看起来像这样:
@RequestMapping(value = "/{id}", method = RequestMethod.POST)
public @ResponseBody
String update(@PathVariable int id, @RequestBody String coordinates, HttpServletResponse response) {
// Do something here to convert it in my complex structure
}
但是我不知道参数coordinates
的类型应该是什么。
我正在使用GSON
。我无法轻易地将其反序列化。我尝试使用this解决方案,但它不起作用。 (由于某种原因,保持要求投射类型。)
由于我认为没有可能正确地反序列化,我试图将坐标序列化为另一种格式(只是一个字符串的JSON数组,其中坐标被一个标记分开(;) here
< / p>
所以我的数组javascript对象是在foreach
:
coordinates.push( someIndex.toString() + ";" + someOtherIndex.toString() );
我保留了字符串部分。
所以现在当我POST
数据到我的控制器时,我用System.out.println(coordinates)
输出值,输出看起来很奇怪。
%5B%220%3B8%22%5D=
在Javascript控制台中为此对象:["0;8"]
。
所以我的问题:
List<Coordinate>
? (我尝试在我的控制器中使用此类型而不是String
,但它会给我一个错误415 - Unsupported media type
)答案 0 :(得分:1)
您在服务器端获得%5B%220%3B8%22%5D=
,因为默认情况下jQuery将数据序列化为查询字符串。
您需要使用application/json
jQuery选项将请求的内容类型设置为contentType
。
然后你可能想看一下GsonHttpMessageConverter的一些实现,以便进行更简单的RequestBody转换。这是one,看起来spring for android中有一个,所以也许你可以使用它。