2014-10-01 80 views
0

我在Spring MVC和json中遇到了麻烦。json和Spring MVC

我用SimplecartJS产生这样的JSON数据:

{"currency":"RUR", 
    "shipping":250, 
    "tax":0, 
    "taxRate":0, 
    "itemCount":2, 
    "item_name_1":"Name of product #1", 
    "item_quantity_1":6, 
    "item_price_1":159, 
    "item_options_1":"", 
    "item_name_2":"Name of product #2", 
    "item_quantity_2":2, 
    "item_price_2":159, 
    "item_options_2":"", 
    "form":{ 
    "Fname":"UserName", 
    "Phone":"7123456789", 
    "Address":"UserAddress", 
    "Comment":"Comment Text" 
    } 
} 

我控制器春

@RequestMapping(value = "/checkorder2", method = RequestMethod.POST, headers = "Accept=application/json") 
    public String test (@RequestBody OrderCon orderC)throws Exception{ 


      ObjectMapper om = new ObjectMapper(); 
      om.canSerialize(OrderCon.class); 
      System.out.println(om); 


     return test(orderC); 
    } 
从客户端

代码

var url = 'http://localhost:8080/url' 
     jQuery.ajax({ 
      headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
      }, 
      contentType:'application/json', 
      dataType: "json", 
      type: "POST", 
      url: url, 
      data: JSON.stringify(data), 

我的问题:

当我向控制器发送数据时,我有一个错误400错误的请求。客户端发送的请求在语法上不正确。当添加一个新的项目字段名称将“item_name_2”,“item_name_3”等我如何解析这一点。我尝试解析到List,Set但它不起作用。请帮忙。

UPD1:OrderCon.java

public class OrderCon { 

    private List<String> form; 
    private List<List<String>> json; 

getters and setters... 
} 
+0

发表您的OrderCon类。 – proulxs 2014-10-01 19:06:35

+0

已添加OrderCon类 – Natalia 2014-10-01 19:14:36

+0

您可以用'name,quantity,price,options'字段为'Item'创建一个类,然后在'OrderCon'类中拥有这些类的列表? – Leon 2014-10-01 19:17:08

回答

0

您无法将该数据解析为像你这样的类,因为你需要向Java类添加动态属性。

你但是有两个选择来获取数据出来

第一个选项是解析JSON字符串到一个HasMap,即。改变你的控制器签名

public String test (@RequestBody Map<String, String> orderC) 

另一种选择是使用JsonNode和处理数据的树,这里有一个例子http://wiki.fasterxml.com/JacksonTreeModel

我个人会尝试后第一

+0

感谢它的工作。 – Natalia 2014-10-05 20:10:13

0

你得到400错误的请求,因为春天是试图传递的JSON直接映射到你的OrderCon类。

为此,类需要映射到JSON中指定的键。

IE:

JSON:只有

public class someJsonPojo(){ 

    String name; 
    String phone; 

    //setters & getters 

} 

我不认为因为不是获得项目的数组,这将很好地工作,您:

{ 
    "name" : "foo", 
    "phone": "111-111-1111" 
} 

将映射到将一个项目作为新的键值添加到列表中:值。您应该可以修改JSON,以便映射到包含名称,数量,价格等的Item对象的数组。

+0

它只适用于静态数据。 – Natalia 2014-10-05 20:09:09