9

我正在使用Grails 2.1.1并希望添加一些映射到控制器操作的自定义 URL。

我可以这样做,但原始映射仍然有效。

例如,我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 的精神,我想做一个 301 重定向 from /mysite/property/createto /mysite/add-property-to-directory

我找不到在UrlMappings.groovy. 有谁知道我可以在 Grails 中实现这一点的方法吗?

非常感谢你!

更新

这是我根据汤姆的回答实施的解决方案:

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')
    }
}

重定向控制器.groovy

class RedirectController {

    def index() {
        redirect(url: params.destination, permanent: true)
    }
}
4

2 回答 2

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
于 2012-09-27T08:41:26.060 回答
2

从 Grails 2.3 开始,可以直接在 UrlMappings 中进行重定向,而不需要重定向控制器。因此,如果您升级,您可以像这样在 UrlMappings 中重定向,根据文档

"/property/create"(redirect: '/add-property-to-directory')

作为原始请求一部分的请求参数将包含在重定向中。

于 2017-07-31T16:51:16.587 回答