我有个想法,我想为这两个URL类别分配前缀。一类是
/baseurl/api/$controller
用于 protected REST URL,然后:
/baseurl/register/$action
用于当前一类不安全的URL
然后,我认为将/ api和/ register前缀存储在变量中会很好,这样,如果需要(例如我的安全性配置),可以在其他地方引用它们。但是,我无法在UrlMappings中使用它。似乎没有填充定义URL部分的变量。考虑下面的UrlMappings.groovy,其中我定义了一个SignupController.groovy来映射到注册,所有其他 Controller 与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调用我的 Controller ,即
localhost:8080/login
和localhost:8080/signup
,而我希望它是:localhost:8080/api/v1/login
和localhost:8080/register/signup
我该如何解决?
最佳答案
您可以使用组来分隔不同的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) { .... }
希望能为您带来帮助,即使不是很抱歉
关于grails - 在Grails 3中参数化UrlMappings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34711819/