如何禁用某些操作的默认URL映射

时间:2017-02-16 12:19:14

标签: grails groovy grails-controller grails-3.1 urlmappings.groovy

我使用的是Grails版本3.1.12。

我想为操作禁用一些默认的URL映射,以便手动管理它们。例如,给定控制器:

class MyController {

    myAction() {
        render('Hello')
    }
}

此操作默认映射到my/myAction,但我想禁用此映射并使用UrlMappings.groovy中定义的自定义映射:

static mappings {

     "/$controller/$action?/$id?(.$format)?"{
        constraints {
            // apply constraints here
        }
    }

    '/myCustomAction'(controller: 'my', action: 'myAction')
}

首次创建Grails项目时默认提供/$controller/$action...映射,并提供我仍想要其他一些操作的默认约定,但我想排除myAction的默认映射。我尝试过使用UrlMappings.groovy中的excludes设置:

static excludes = ['/my/myAction']

但是,端点my/myAction会一直响应默认映射。

如何实现理想的行为?

1 个答案:

答案 0 :(得分:1)

路由my/myAction由默认的/$controller/$action映射生成。因此,您需要编辑该映射的约束部分以排除您的控制器,这样的事情应该可行(Albiet有些丑陋):

"/$controller/$action?/$id?(.$format)?"{
    constraints {
        controller(validator: { return it != 'my'})
    }
}