См Binding Request Body To Command объекты раздела http://grails.github.io/grails-doc/2.3.0/guide/introduction.html#whatsNew23. Это немного изменилось в Grails 2.3.x. В принципе, если вы попытаетесь получить доступ к запросу JSON два раза, он не будет доступен вам, поскольку Grails закрывает поток запросов после разбора данных и использует его для привязки любого CommandObject или любого экземпляра домена (как объекта команды).
Так что, если вы передаете запрос JSON к действию сказать, поддержка: {"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
}
}
Благодарим за информацию. Похоже, что Grails 2.3+ не может вводить объекты без команд в методы действий. Я должен был упомянуть, что я уже знал, что могу использовать объект команды или 'request.JSON' для получения свойств тела JSON HTTP. Мне не нужно было просматривать каждый метод действий в каждом контроллере, а затем менять код в каждом затронутом методе, чтобы передать данные тела тела String/primitive (так как оба объекта команды и запрос request.JSON требуют изменения кода) , – XDR
О, так вам нужен альтернативный код для поддержки вашего кода, поскольку он не поддерживается в Grails 2.3+? –
Мне не нужно иметь альтернативу, но было бы неплохо избегать просмотра множества контроллеров и сотен методов действий, которые я не писал, чтобы определить, какие аргументы из строк запроса, и которые из HTTP-объектов , – XDR