See Binding Request Body To Command Objects section in http://grails.github.io/grails-doc/2.3.0/guide/introduction.html#whatsNew23. It changed a bit in Grails 2.3.x. Basically if you try to access the request JSON two times it won't be available to you since Grails closes the request stream after parsing the data and uses it to bind any CommandObject or any domain instance (as command object).
So if you are passing request JSON to a action say support: {"foo": "bar"}
and you are trying to do this:
class SomeController {
def test(String foo) {
println foo // Will be null
println request.JSON.foo // Will be "bar"
}
}
Instead any domain class binding will work now:
class MyDomainClass {
String foo
}
And modified controller action:
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
}
}