获取方法的参数

时间:2013-12-07 21:35:15

标签: grails grails-controller

我需要在运行时从任何项目中的所有控制器获取所有方法及其参数的列表。 我没有找到检索参数的方法或示例。例如,在方法中:

def login(String username, String password) {
...
}

我需要参数用户名和密码及其类型。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:3)

在编译期间,AST转换为带有参数的操作方法添加了一个空方法。这个注释带有grails.web.Action注释,其中commandObjects属性包含命令对象类和常规方法参数类型的Class[]数组。

因此,您可以遍历应用程序中的所有控制器,并找到所有带注释的方法:

import grails.web.Action

for (cc in grailsApplication.controllerClasses) {
   for (m in cc.clazz.methods) {
      def ann = m.getAnnotation(Action)
      if (ann) {
         String controller = cc.logicalPropertyName
         String action = m.name
         Class[] argTypes = ann.commandObjects()
         println "${controller}.$action(${argTypes*.name.join(', ')})"
      }
   }
}