Параметры 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
}
}