【问题标题】:Parameterize UrlMappings in Grails 3在 Grails 3 中参数化 UrlMappings
【发布时间】:2016-01-15 02:28:16
【问题描述】:

我有一个想法,我想为我的两类 URL 分配前缀。一个类别是

/baseurl/api/$controller

对于安全的 REST URL,然后:

/baseurl/register/$action

针对当前一类不安全的 URL

然后我认为最好将前缀 /api 和 /register 存储在变量中,以便在需要时可以在其他地方引用它们(例如我的安全配置)。但是,我无法在我的 UrlMappings 中使用它。似乎没有填充定义 URL 部分的变量。考虑以下 UrlMappings.groovy,其中我定义了一个 SignupController.groovy 以映射到注册,并且每个其他控制器都与 API 相关:

class UrlMappings {
    static final API_URL_ROOT = "/api"
    static final REGISTER_URL_ROOT = "/register"
    static mappings = {
        API_URL_ROOT + "/$controller/$action?/$id?(.$format)?" {
            constraints {

            }
        }

        REGISTER_URL_ROOT (controller: "signup")

        "/"(view: "/index")
        "500"(view: '/error')
        "404"(view: '/notFound')
    }
}

当它运行时,我只能通过根 URL 直接调用我的控制器,即 localhost:8080/loginlocalhost:8080/signup,而我希望它是:

localhost:8080/api/v1/loginlocalhost:8080/register/signup

我该如何解决这个问题?

【问题讨论】:

  • 我对你的问题的回答还是不满意吗?如果没有,你能接受吗

标签: grails grails-3.0


【解决方案1】:

您可以使用 group 来分隔不同的 api

http://mrhaki.blogspot.com/2013/11/grails-goodness-grouping-url-mappings.html?m=1

在你的情况下,它可能会变成这样

group("/api") { 
     "/$controller/$action?/$id?(.$format)?" { constraints { } }
     // PUT HERE ALL OTHER API MAPPING
} 

group("/register") { 
    "/$controller" {} 
    // PUT HERE ALL REGISTER MAPPINGS 
} 

如果您需要考虑您的 api 版本,请执行此操作

group("/api") {
    "/$namespace/$controller/$action/$id?" {}
    // OR ANY OTHER MAPPING YOU NEED. Then in your controller define
    // static namespace = 'v1' 
    // for example for your v1 controllers.
}

然后,您可以根据需要将组声明为变量。

 static API="/api"

 group (API) { .... }

如果不为噪音感到抱歉,希望能有所帮助

【讨论】:

  • 这有什么帮助?它似乎与我所描述的问题没有任何关系,除非我遗漏了什么......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多