2013-12-07 89 views
2

我需要在運行時從任何項目中的所有控制器列出所有方法及其參數。 我還沒有找到一個方法或檢索參數的例子。例如在方法中:獲取方法的參數

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

我需要參數username和password與他們的類型。

非常感謝您的幫助。

回答

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(', ')})" 
     } 
    } 
} 
+0

感謝。優秀的解決方是否有可能也有參數的名稱和類型?使用這個例子來得到:(username String,password String)? – ncaramolegos

+0

如果使用調試信息編譯類,則應該可以使用該信息。我嘗試使用'org.springframework.core.LocalVariableTableParameterNameDiscoverer',但沒有找到名稱。你應該看看這個:http://stackoverflow.com/questions/2729580/how-to-get-the-parameter-names-of-an-objects-constructors-reflection/2729907#2729907 –