2014-02-17 3 views
0

Я пытаюсь передать массив JSON в весеннем MVC контроллер, как, например:Переходя в JSON массива Spring MVC контроллер

var myList = new Array(); 
data._children.forEach(function (d) { 
         myList.push({NAME: d.name, TYPE: d.TYPE, FDATE: d.FDATE }); 
        }); 

$.post("/ListRequest", {myList: myList}); 

Контроллер выглядит так:

@RequestMapping(value="/ListRequest", method = RequestMethod.POST) 
    public void ListRequest(@RequestParam("myList") myList tempmyList) 
    { 
     System.out.println(tempmyList); 
    } 

определен класс MyList как таковой:

public class MyList { 
    private List<ListT> ListT; 
    public List<ListT> getListT() { 
     return ListT; 
    } 

    public void setListT(List<ListT> listT) { 
     ListT = listT; 
    } 

} 

ListT класс:

public class ListT { 
    private String NAME; 
    private String TYPE; 
    private Long FDATE; ... 

Я получаю эту ошибку: HTTP Status 400 - Обязательный параметр MyList 'MyList' не присутствует

Также попробовал этот запрос:

$.ajax({ 
       type: "post", 
       url: "ListRequest", //your valid url 
       contentType: "application/json", //this is required for spring 3 - ajax to work (at least for me) 
       data: JSON.stringify(myList), //json object or array of json objects 
       success: function(result) { 
        //do nothing 
       }, 
       error: function(e){ 
        alert('failure'); 
       } 

но получаю эту ошибку: JBWEB000120: Запрос отправленный клиентом, был синтаксически неправильным.

+1

Открыть консоль вашего браузера и проверить, что JSON действительно записано в запросе. Отправьте это здесь. Кроме того, вам нужно будет использовать '@ RequestBody', а не' @ RequestParam'. Я позволю тебе понять, почему. –

+0

Я попробовал @RequestBody, но получаю неподдерживаемую ошибку mediatype. Также JSON выглядит так: {«myList»: [{«NAME»: «Blah», «TYPE»: «TYPE1», «DATE»: 1385874000000}]} – mrkb80

+2

Измените запрос AJAX на отправку типа контента как 'приложение/json'. –

ответ

2

попытаться добавить это к вам АЯКС назвать это должно исправить неподдерживаемый ответ:

headers : { 
    'Accept' : 'application/json', 
    'Content-Type' : 'application/json' 
}, 

это полный пример Ajax вызова, который работает для меня:

$.ajax({ 
      dataType : "json", 
      url : this.baseurl + "/dataList", 
      headers : { 
       'Accept' : 'application/json', 
       'Content-Type' : 'application/json' 
      }, 
      data : JSON.stringify(params), 
      type : 'POST', 
      success : function(data) { 
       self.displayResults(data); 
      }, 
      error : function(jqXHR,textStatus,errorThrown){ 
       showPopupError('Error','error : ' + textStatus, 'ok'); 
      } 
     }); 
+0

получается, что я получал ошибку 404, потому что контроллер ничего не возвращал, но запрос был фактически полностью правильным. – mrkb80

+0

Я хочу использовать технику, указанную в этой теме. Мой вызов Ajax указывает «contentType:» application/json'', 'dataType: 'json'' и' data: {"values": JSON.stringify ([' String1 ',' String2 ',' String3 '])} ' , В моем контроллере я аннотирую аргумент метода контроллера как '@RequestParam List valuesList'. Вызывается метод контроллера, но когда я просматриваю значения в 'valuesList', я вижу:' ["String1" ',' "String2" 'и' "String3"] '! Что я делаю не так?! –

+0

Похоже, вы используете GET, я не с десериализацией происходит с '@ RequestParam', попробуйте отправить вам данные в сообщении и использовать' @ RequestBody' в вашем контроллере – jpprade

-1

Вы можете попробовать

@RequestParam ("MyList") MyList tempmyList


@param MyList tempmyList

кроме того, имена классов должны начинаться с прописной буквы.

+0

Что вы изменили? Что такое '@ Param'? Имя класса _must not_ начинается с буквы верхнего регистра, они должны начинаться с буквы верхнего регистра. –

+0

исправил прописную букву, извините за это. – mrkb80

0

Даже я был сталкиваясь с такой же проблемой. Мой запрос клиента был прав и сгенерировал правильный json-файл. , но все же я получал такую ​​же ошибку.

Я решил эту ошибку, используя @JsonIgnoreProperties (ignoreUnknown = true) в классе pojo.

обратитесь по этой ссылке. Spring MVC : The request sent by the client was syntactically incorrect

Смежные вопросы