net*_*ain 5 grails url-mapping
例如,假设我在 webapp 上有一个 API,并且我希望在 API 中使用与 webapp 的其余部分相同的控制器和操作。
在我的 urlmappings 文件中,我有
"/api/$version/$apiKey/$controller/$acion/$id?"
Run Code Online (Sandbox Code Playgroud)
我也有这样的映射:
"/blog/$year/$month/$day/$action" {
controller = 'blog'
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,我能否以某种方式将 api urlmapping 加到博客 urlmapping 的前缀,以便我可以从 $year、$month、$day 变量中受益?以这样一种方式,对以下 url 的 GET 请求将是有效的:
GET /api/0.1/bs23mk4m2n4k/blog/2001/01/05/list
Run Code Online (Sandbox Code Playgroud)
还是我被迫执行以下请求?
GET /api/0.1/bs23mk4m2n4k/blog/list?year=2004&month=01&day=05
Run Code Online (Sandbox Code Playgroud)
需要 urlmappings GURU 或 groovy 运行时 urlmappings 操作向导的帮助:)
我想要一个可以重用现有非 api urmapping 的解决方案,而不必使用 api 路径作为前缀重新声明它们。
您可以让 ApiController 去掉 api 参数,然后重定向到博客控制器。例如:
"/api/$version/$apiKey/$rest**" {
controller:'api'
action:'default'
}
import org.codehaus.groovy.grails.web.util.WebUtils
class ApiController {
def grailsUrlMappingsHolder
def default = {
// validate apiKey, etc
WebUtils.forwardRequestForUrlMappingInfo(request, response, grailsUrlMappingsHolder.match("/${params.rest}"))
}
}
Run Code Online (Sandbox Code Playgroud)
API 控制器可以访问版本和 apiKey 参数,并传递其余参数以供博客控制器的 UrlMapping 处理。