У меня есть фильтры, подобные тем, которые определены ниже. Они запускают один и тот же блок кода в разных местах, поэтому, чтобы сохранить его СУХИМ, я преобразовал этот код в метод с именем doResponse().
class MyFilters {
def filters = {
web(uri: '/web/**') {
before = {
// Do Stuff
if (condition) {
doResponse(request, response, params)
}
return true
}
after = {
if (condition) {
doResponse(request, response, params)
}
else {
// Do Stuff
doResponse(request, response, params)
}
}
afterView = {
}
}
}
boolean doResponse(request, response, params) {
// Do Stuff
render(status: statusCode, contentType: "text/xml", encoding: "ISO-8859-1", text: text)
// Do post-render stuff
return false
}
}
Однако это имеет неприятный побочный эффект. Кажется, что метод render() доступен только внутри закрытия фильтров. Есть ли какой-нибудь (аккуратный) способ вызвать render() из doResponse()?
Изменить: ошибка, которую я получаю:
groovy.lang.MissingMethodException: Нет подписи метода: MyFilters.render() применим для типов аргументов: (java.util.LinkedHashMap) значения: [[status: 500, contentType: text/xml, encoding: ISO-8859-1 , текст:...]]