我正在使用Grails 2.1.1
,并希望添加一些映射到控制器操作的自定义网址。
我可以这样做,但原始映射仍然有效。
例如,我在add-property-to-directory
中创建了一个映射UrlMappings
,如下所示:
class UrlMappings {
static mappings = {
"/add-property-to-directory"(controller: "property", action: "create")
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/"(view:"/index")
"500"(view:'/error')
}
}
现在,我可以点击/mysite/add-property-to-directory
,它会执行PropertyController.create
,正如我所料。
但是,我仍然可以点击/mysite/property/create
,它会执行相同的PropertyController.create
方法。
本着DRY的精神,我想从/mysite/property/create
到/mysite/add-property-to-directory
进行301重定向。
我找不到在UrlMappings.groovy
中执行此操作的方法。有谁知道我可以在Grails中实现这一目标的方式?
非常感谢!
更新
根据Tom的回答,这是我实施的解决方案:
UrlMappings.groovy
class UrlMappings {
static mappings = {
"/add-property-to-directory"(controller: "property", action: "create")
"/property/create" {
controller = "redirect"
destination = "/add-property-to-directory"
}
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/"(view:"/index")
"500"(view:'/error')
}
}
RedirectController.groovy
class RedirectController {
def index() {
redirect(url: params.destination, permanent: true)
}
}
答案 0 :(得分:3)
可以实现这一目标:
"/$controller/$action?/$id?" (
controller: 'myRedirectControlller', action: 'myRedirectAction', params:[ controller: $controller, action: $action, id: $id ]
)
"/user/list" ( controller:'user', action:'list' )
并且在行动中你得到了params中的值normallny:
log.trace 'myRedirectController.myRedirectAction: ' + params.controller + ', ' + params.action + ', ' + params.id
答案 1 :(得分:0)
从Grails 2.3开始,可以直接在UrlMappings中进行重定向,而无需重定向控制器。因此,如果你升级了,你可以像documentation一样在UrlMappings中重定向:
"/property/create"(redirect: '/add-property-to-directory')
作为原始请求一部分的请求参数将包含在重定向中。