Параметры Grails 2.5.0 метода действия контроллера из тела JSON POST

В Grails 2.5.0 возможно ли ввести значение свойства из тела JSON POST в параметр метода действия контроллера, который не является объектом команды? например, в строку, примитив и т. д.

Это было возможно в Grails 2.2.4, но я не нашел способа сделать это в 2.5.0.

(Я знаю, что значения строки запроса могут быть введены в параметры метода действия контроллера в Grails 2.5.0 и 2.2.4)

1 ответ

См. Раздел " Привязка тела запроса к объектам команды " в http://grails.github.io/grails-doc/2.3.0/guide/introduction.html. Это немного изменилось в Grails 2.3.x. По сути, если вы попытаетесь получить доступ к JSON-запросу два раза, он не будет вам доступен, поскольку Grails закрывает поток запроса после анализа данных и использует его для привязки любого Command Object или любого экземпляра домена (как объекта команды).

Поэтому, если вы передаете запрос JSON действию, скажите support: {"foo": "bar"} и вы пытаетесь сделать это:

class SomeController {

    def test(String foo) {
        println foo        // Will be null
        println request.JSON.foo           // Will be "bar"
    }
}

Вместо этого теперь будет работать любая привязка класса домена:

class MyDomainClass {

     String foo
}

И модифицированный контроллер действия:

class SomeController {

    def test(MyDomainClass domainInstance) {
        println domainInstance.foo        // Will be "bar"
        println request.JSON           // Will be null since request stream is closed and binded to the domainInstance
    }
}
Другие вопросы по тегам