将JSON List of Object发送到Spring MVC控制器

时间:2014-09-06 14:09:55

标签: ajax json spring-mvc

我向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>即可。

以下是截屏:

Object Data

1 个答案:

答案 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())}是一个对象,因此它将转换为查询字符串。