【问题标题】:Get methods' arguments获取方法的参数
【发布时间】:2013-12-07 21:35:15
【问题描述】:

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

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

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

非常感谢您的帮助。

【问题讨论】:

    标签: grails grails-controller


    【解决方案1】:

    在编译期间,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(', ')})"
          }
       }
    }
    

    【讨论】:

    • 谢谢。优秀的解决方案。是否可以同时具有参数的名称和类型?使用示例有:(用户名字符串,密码字符串)?
    • 如果类是使用调试信息编译的,那么该信息应该可用。我尝试使用org.springframework.core.LocalVariableTableParameterNameDiscoverer,但没有找到名称。你应该看看这个:stackoverflow.com/questions/2729580/…
    猜你喜欢
    • 2011-03-24
    • 1970-01-01
    • 2012-10-09
    • 2011-10-09
    • 2016-10-21
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多