2014-10-01 4 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" 
    } 
} 

Мой контроллер Spring

@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

+0

Добавлено OrderCon class – Natalia

+0

Можете ли вы создать класс для 'Item' с полях' имя, количество, цена, опции', а затем список в классе 'OrderCon'? – Leon

ответ

0

Вы не сможете разобрать эти данные на такой класс, как вы, поскольку вам нужно добавить динамические свойства в класс Java.

Вы, тем не менее есть два варианта, чтобы получить данные из

Первый вариант является разобрать JSON в HasMap строк, то есть. изменить контроллер подписи

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

Другой вариант заключается в использовании JsonNode и иметь дело с данными, как дерево, вот пример http://wiki.fasterxml.com/JacksonTreeModel

лично я хотел бы попробовать последний первый

+0

Спасибо, что он работает. – Natalia

0

Вы получаете +400 Bad Request, потому что Spring пытается отобразить переданный JSON непосредственно к классу OrderCon.

Для этого необходимо, чтобы класс сопоставлялся клавишам, указанным в JSON.

IE:

JSON:

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

будет отображаться на:

public class someJsonPojo(){ 

    String name; 
    String phone; 

    //setters & getters 

} 

Я не думаю, что это будет работать хорошо, так как вместо того, чтобы массив элементов, вам только получите элемент, добавленный к списку, в качестве нового ключа: значение. Вы должны иметь возможность изменять JSON, чтобы вы могли сопоставить массив из Item объектов, которые содержат имя, количество, цену и т. Д.

+0

Он работает только со статическими данными. – Natalia