我正在尝试使用 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
. 而且我无法轻松反序列化它。我尝试使用此解决方案,但它不起作用。(出于某种原因一直要求转换类型。)
由于我认为不可能正确反序列化,因此我尝试将坐标序列化为另一种格式(只是一个 JSON 字符串数组,其中坐标由令牌分割(;) here
所以我的数组中的javascript对象是这样创建的foreach
:
coordinates.push( someIndex.toString() + ";" + someOtherIndex.toString() );
我保留了字符串化部分。
所以现在当我POST
将数据发送到我的控制器时,我输出的值System.out.println(coordinates)
和输出看起来很奇怪。
%5B%220%3B8%22%5D=
对于 Javascript 控制台中的这个对象:["0;8"]
。
所以我的问题:
- 这是一个好方法吗?
- 是否可以将 JSON 数组反序列化为某些 java 类型?比如
List<Coordinate>
?(我尝试过使用这种类型而不是String
在我的控制器中,但它会给我一个错误415 - Unsupported media type
) - 如果我使用 String 方法,有没有办法将这些乱码翻译成我想要的东西?