On client side you have to send data using POST method, and configure jQuery to send it as JSON. Like:
data = {
language: "java",
meta: {
category: "category1"
}
}
$.ajax({
type: 'POST',
data: JSON.stringify(data),
contentType: 'application/json',
})
And get on server side as request.JSON
see docs: http://grails.org/doc/2.2.0/ref/Servlet%20API/request.html
But, if you need to make Cross Domain request, POST method just doesn't work. At this case you can pass your complex object as a parameter, and parse on server from the string. Like:
$.ajax({
data: {myjson: JSON.stringify(data)}
})
and:
def myjson = JSON.parse(params.myjson)