如何覆盖grails 3控制器的重定向

时间:2018-01-27 14:32:49

标签: grails grails-3.0 grails-3.3

我想覆盖(扩展)grails 3控制器的重定向方法。

在grails 2中,这是通过metaClass覆盖方法完成的。见Override Grails redirect method

自Grails 3以来,这已不再适用了。

我想要实现的目标:我想操纵传递给我实现的每个控制器的重定向方法的参数映射(按包名过滤)

或者更具体一点:我想基于一些小逻辑添加/更改映射参数

2 个答案:

答案 0 :(得分:3)

  

我想覆盖(扩展)grails 3的重定向方法   控制器。

您可以按照通常的语言规则覆盖方法......

class DemoController {

    // ...

    void redirect(Map m) {
        // do whatever you like here...
    }
}

如果你想调用原始的redirect方法,你也可以这样做,但你需要明确地实现Controller特征......

import grails.artefact.Controller

class DemoController implements Controller {

    void redirect(Map m) {
        // do whatever you like here before
        // invoking the original redirect...

        // invoke the original redirect...
        Controller.super.redirect m
    }
}

答案 1 :(得分:0)

您可以尝试使用类型注释和GroovyASTTransformation进行AST转换。例如:查看使用groovy.transform.Sortable注入compareTo方法的org.codehaus.groovy.transform.SortableASTTransformation注释