Запросить параметры и метод PUT - PullRequest
9 голосов
/ 25 августа 2011

Я пытаюсь получить параметры запроса, передаваемые по запросу PUT, в приложении на основе Grails.

Я использую следующий код клиента, чтобы сделать запрос:

$.ajax({
    url: 'api/controllerName/anId',
    type: 'PUT',
    data: $('form').serialize()
})

со следующим отображением:

"/api/$controller/$id?" {
    action = [ GET: "read", POST: "create", PUT: "update", DELETE: "delete"]
}

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

[id:anId, action:[GET:read, POST:create, PUT:update, DELETE:delete], controller:controllerName]

и request.getParameterNames() возвращает пустой список значений.

Как я вижу из FireBug, запрос содержит эти параметры и имеет Content-Type как application/x-www-form-urlencoded; charset=UTF-8

Если я использую метод GET / POST - все работает как положено, я могу получить все переданные параметры.

Как мне получить доступ к переданным параметрам?

Обновление : Я только что понял, что PUT подразумевает передачу данных в виде JSON / XML в теле. Кстати, этот вопрос все еще актуален, на всякий случай

Ответы [ 2 ]

8 голосов
/ 03 апреля 2012

У меня была та же самая проблема сегодня, и я смог ее исправить.Я сделал ajax-запрос с JQuery к Grails RESTful WebService (метод: «PUT»), но карта параметров была пустой.

Просто хочу поделиться своим решением здесь.

Мне пришлосьJSON.stringify мои данные и установите для contentType значение «application / json», а затем используйте request.JSON (как предлагалось ранее) в моем контроллере Grails.

пример (JQuery Ajax Request):

$.ajax({
        url: "/entries/" + id,
        contentType: "application/json",
        type: "PUT",
        dataType: "json",
        data: JSON.stringify({'name' : name, 'date': date}),
        success: function(msg) {
            console.log('updated...')
            $.mobile.changePage($('#list'));
        }

впоследствии я мог использовать:

request.JSON

в моем контроллере, чтобы получить данные, отправленные запросом ajax (параметры все еще были пусты).Если я не использовал JSON.stringify и не устанавливал тип содержимого, у меня была следующая ошибка Grails:

Error 2012-04-03 13:50:20,046 [http-bio-8080-exec-3] ERROR errors.GrailsExceptionResolver  - IllegalStateException occurred when processing request: [PUT] /entries/2
getReader() has already been called for this request. Stacktrace follows:
Message: getReader() has already been called for this request

Я использую Grails 2.0.1 и JQuery 1.7.1

0 голосов
/ 26 августа 2011

Попробуйте request.JSON (или request.XML) вместо params.

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