在控制器上调用时,为什么getParameterTypes为空?

时间:2014-04-18 21:09:23

标签: java grails groovy

如果我有一个控制器方法的实例,通过在控件的Class对象上调用getMethod获得,为什么定义为带1参数的方法为“getParameterTypes”有一个空数组?

有没有办法真正获得它接受的参数类型?

2 个答案:

答案 0 :(得分:3)

如果定义一个接受任何参数的控制器动作,Grails编译器会生成相应的无参数方法。

class MyController {
    // you write an action like this...
    def someAction(String name, Integer age) {
        // your code here
    }

    // the Grails compiler generates this additional method...
    def someAction() {
        // do some stuff needed by the framework

        // ...

        // initialize parameters

        def name = ...
        def age = ...

        // call the original method
        someAction(name, age)
    }
}

我希望您在Grails编译器生成的方法上调用getParameterTypes而不是原始方法。

答案 1 :(得分:0)

您的行动是关闭还是方法?如果它是一个闭包,我不希望它与反射API中的Method类一起使用。我从我自己的一个控制器

测试了以下方法 - 动作
class MyController {

  def someAction(MyCommand command) {

  }
}

并且它的行为符合预期

Method action = MyController.methods.find( it.name == 'someAction' }
assert [MyCommand] == action.parameterTypes as List