У меня есть фильтры, подобные тем, которые определены ниже.Они запускают один и тот же блок кода в разных местах, поэтому, чтобы он оставался СУХИМ, я преобразовал этот код в метод 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, кодировка: ISO-8859-1, текст: ...]]