Предполагая, что это вызов ajax? Вы можете обрабатывать определенные коды ошибок, такие как ...
...
statusCode:{
400: function() {
alert( 'Got a 400' );
}
},
...
Я думаю, что установка кода ошибки в ответе хороша, не уверен, что он будет отображаться как JSON, но если он работает для вас, то просто верните свое сообщение об ошибке в виде строки или карты материала или что угодно.
Следующий вызовет блок:
def myAction() {
response.status = HttpServletResponse.SC_BAD_REQUEST
render('This will invoke the 400 handler')
}