我向Spring MVC控制器发送一个对象列表时遇到了问题。
对象列表就像这样
[{"alias":"1",
"rue":"Rue de la Senette",
"codePostal":"78955",
"ville":"Carrières-sous-Poissy",
"rueComplement":""}]
我使用以下 AJAX 代码发送上述数据:
$.ajax({
type : 'POST',
dataType : 'json',
contentType :'application/json',
url : $("#clientForm-add").attr('action'),
data : JSON.stringify(adresses.toArray()),
});
当我使用这种形式的ajax时,它对我有用,并且发送的格式如下:
Request Payload :
[{"alias":"1",
"rue":"Rue de la Senette",
"codePostal":"78955",
"ville":"Carrières-sous-Poissy",
"rueComplement":""}]
是的,即使上面的一个工作,当我发送它时如下:
$.ajax({
type : 'POST',
dataType : 'json',
contentType :'application/json',
url : $("#clientForm-add").attr('action'),
data : {adresseList : JSON.stringify(adresses.toArray())},
});
它对我不起作用。发送数据看起来像
listAdresse =%5B%7B%22alias%22%3A%221%22%2C%22rue%22%3A%22Rue +的+ LA + Senette%22%2C%22codePostal%22%3A%2278955%22% 2C%22ville%22%3A%22Carri%C3%A8res-苏-普瓦西%22%2C%22rueComplement%22%3A%22%22%7D%5D 响应标题查看源
而且,它出错: 400 bad request
在这里,我的控制器
@RequestMapping(value = "creerlivraison/ajouterclientBD",method=RequestMethod.POST)
public String ajouterClientBD(@RequestBody Adresse[] listAdresse, Principal principal) {
for (Adresse adresse : listAdresse) {
System.out.println(adresse);
}
return "ok";
}
我想知道"两个ajax请求之间的区别是什么?",当我将数据包装在 braquets {}中并指定listAddress时,为什么请求有效负载被格式化/ strong>即可。
以下是截屏:
答案 0 :(得分:1)
http://api.jquery.com/jquery.ajax/
数据
键入:PlainObject或String或Array
要发送到服务器的数据。如果不是字符串,它将转换为查询字符串。它附加到GET请求的URL。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery会根据传统设置的值使用相同的键序列化多个值(如下所述)。
在这个例子中,
JSON.stringify(adresses.toArray())
是字符串,只保留JSON格式。{adresseList : JSON.stringify(adresses.toArray())}
是一个对象,因此它将转换为查询字符串。