Как передать массив в метод контроллера Spring с помощью jquery ajax - PullRequest
11 голосов
/ 01 апреля 2011

Вот мой вызов ajax:

 $.ajax({
     type: 'GET',
     url: contextPath + '/test/location',
     data: {'objectValues': object.objectValues },
     datatype: 'json',
     success: function( data ) {
     var obj = jQuery.parseJSON( data );
     }
   });

это дает мне этот URL:

http://localhost:8080/test/location?objectValues[]=1234567890&objectValues[]=0987654321

Моя подпись метода Spring выглядит следующим образом:

@RequestMapping(value = "/location", method=RequestMethod.GET)
    public @ResponseBody String loadLocation(@RequestParam(value="objectValues", required=false) String[] objectValues)

Почему я продолжаю получать значение NULL для значения objectValues?

Ответы [ 3 ]

17 голосов
/ 18 апреля 2011

Попробуйте изменить значение аннотации RequestParam на это:

@RequestParam(value="objectValues[]", required=false)

Если это решит проблему, то это связано с несовместимостью именования параметров между Spring и jQuery, где jQuery хочет поместить квадратные скобки вуказывают на то, что параметр является массивом (я думаю, PHP это тоже нравится), но где Spring это не волнует.Чтобы увидеть обратное, попробуйте установить параметр «data» запроса ajax в строку: 'objectValues ​​= 1234567890 & objectValues ​​= 0987654321'

10 голосов
/ 18 июня 2013

Есть несколько способов сделать это, в зависимости от того, какой компонент, по вашему мнению, отправляет или получает данные в неправильном формате (или какой компонент у вас есть доступ для изменения).

Если вы считаете, что способ по умолчаниюjQuery отправляет данные правильно, измените ваш контроллер соответствующим образом (обратите внимание, что вам нужно изменить как подпись метода, так и аннотацию, если вы используете оба):

@RequestMapping(value = "/location", method=RequestMethod.GET, params="objectValues[]")  
public @ResponseBody String loadLocation(@RequestParam(value="objectValues[]", required=false) String[] objectValues) {  
    ...  
}

Если вы считаете, что Spring работает правильно, но данныеотправлено из jQuery неверно, измените jQuery:

$.ajax({
    traditional: true,
    ...  
});

Подробнее о настройках jQuery AJAX для настройки traditional.

Я сам думаю, что чищеизменить способ отправки данных jQuery;он сохраняет синтаксис моего контроллера таким, каким я хочу.

0 голосов
/ 01 апреля 2011

попробуйте установить ваши ajaxSettings в традиционный.

jQuery.ajaxSettings.traditional = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...