Вопрос задавался очень давно, поэтому мой ответ мог быть невозможен тогда - но сейчас апрель 2014 года. Этот код показывает наиболее простой способ добавления метода ко всем вашим контроллерам (изнутри BootStrap.init
). ):
grailsApplication.controllerClasses.each { controllerClass ->
if (controllerClass.clazz.name.contains("org.idurkan.foo")) {
controllerClass.metaClass.respondError = { String message, int status = 404 ->
response.status = status
render([errorMessage: message] as JSON)
}
}
}
- В BootStrap.groovy, введите GrailsApplication так:
def grailsApplication
- Сделайте вызов, подобный моему выше, подставив собственное имя пакета - чтобы не возиться с классами плагинов.
- Теперь в любом контроллере вы можете использовать закрытие
repondError
(вызывать его как метод).
Обратите внимание, что это не добавляет действие! Это просто утилита закрытия / метод, доступный в каждом
контроллер.