Я использую grails 2.4.4 и настроил фильтр для фильтрации запросов на определенных контроллерах. Есть ли способ получить действие / метод, для которого предназначен запрос? У меня есть аннотации к методам, и я хочу отфильтровать запросы, чтобы проверить, есть ли аннотации у метода, для которого запрашивается запрос, я делаю несколько дополнительных шагов.
class MyTestFilters {
def filters = {
testFilter(controller:'myControler', action:'*') {
before = {
GrailsClass artefact = grailsApplication.getArtefactByLogicalPropertyName('Controller', controllerName)
def controller = applicationContext.getBean(artefact.clazz.name)
Annotation annotation
try{
annotation = controller.getClass().getDeclaredMethod(actionName, *SomeParameter*).getAnnotation(MyAnnotation)
} catch(Exception e){
println e.getMessage()
}
if (annotation != null){
// Do some extra steps
}
}
}
}
}
Проблема здесь в том, что мне нужно искать конкретную сигнатуру для метода. Меня не особо интересуют параметры. Все, что я хочу знать, это то, есть ли у метода, для которого предназначено действие, мою аннотацию MyAnnotation.
Нашел один способ сделать это, перебирая все методы на контроллере.
Method[] methods = controller.class.getMethods().each { method ->
if (method.name == actionName) {
annotation = method.getAnnotation(MyAnnotation)
}
}