Spring и ExtJS "400 Bad Request" с PUT, но не с POST - PullRequest
0 голосов
/ 10 сентября 2011

Я пытаюсь отправить параметры с PUT из JavaScript в приложение Spring.Вот @RequestMapping в Spring Controller:

@RequestMapping(value = "toggle-paid-action", method = RequestMethod.PUT)
@ResponseBody
public final String togglePaid(@RequestParam final int year, 
    @RequestParam final String docType, @RequestParam final int number) {

А вот фрагмент JavaScript, который должен отправлять эти параметры.

Ext.Ajax.request({
    params: {year: year, docType: docType, number: number},
    url: 'toggle-paid-action',
    method: 'PUT',

Однако я получаю «400 Bad Request"каждый раз с описанием" Запрос, отправленный клиентом, был синтаксически неверным () ".

Если я проверяю с помощью Firebug, появляется вкладка PUT со всеми моими параметрами, и параметры пишутся правильно, так как если япри переключении с PUT на POST с обеих сторон все работает.

Мне было интересно, в чем может быть проблема, ограничено ли PUT параметрами @PathVariable или оно может отправлять также POST-подобные параметры?

Ответы [ 2 ]

2 голосов
/ 11 сентября 2011

Я полагаю, что вы не можете передать параметры пружине, используя метод запроса PUT, поскольку в API сервлета есть ограничение.Вы можете работать только с методами PUT, реализующими спокойный сервис, передавая данные как тело запроса , в других случаях (например, привязка данных Spring MVC) PUT не будет работать.см. SpringMVC не распознает параметры тела запроса при использовании PUT

JIRA: https://jira.springsource.org/browse/SPR-7414

0 голосов
/ 20 января 2012

Это, как показано выше, похоже на ошибку в spring/servlet API.В действительности PUT запросы должны работать на Request Body (or payload), а не на параметрах запроса.В этом смысле API сервлетов и обработка Spring верны.

Сказав это, лучше и намного проще обойтись без передачи элемента данных из вашего вызова javascript/jQuery и передачи ваших параметров как части самого URL.то есть, установите параметры в поле url так же, как при вызове GET.

$.ajax({
            url: "yoururl" + "?param1=param2Val&..",
            type: "PUT",
            data: "",
            success: function(response) {
                // ....
            }
     });

теперь это работает для простых параметров, я думаю, не будет работать для сложных типов JSON.Надеюсь это поможет.

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