我正在grails 3.1.6平台上构建一个版本化的API,这就是我所拥有的:
package mysearch
类UrlMappings {
static mappings = {
for(controller in grails.util.Holders.getGrailsApplication().controllerClasses) {
def cName = controller.logicalPropertyName
if(cName.endsWith('API')) {
def controllerName = cName.replace('API', '').replaceAll(/V(\d{1})/, '')
"/api/$version/${controllerName}/$action"(controller: controllerName + version + "API", action: action, parseRequest: true)
}
}
"500"(view:'/error')
"404"(view:'/notFound')
}
}
当我尝试向邮递员提交请求时,我得到404。
经过调查,我可以看到作为请求映射的一部分创建(匹配)的UrlMappingInfo
实例具有以下格式:“/ api /(*)/ merchant /(*)”
这似乎没关系,只要将值替换为适当的参数值,例如。 / api / V1 / merchant /查找此邮递员请求
http://localhost:9090/api/V1/merchant/find
但它们没有得到解决,显然Grails无法在其mappingsToGrailsControllerMap
中找到控制器
当我调试请求并用“正确”值替换UrlMappingInfo时,我的控制器正确处理了请求。我错过了什么?可能是UrlMapping控制器中的语法:区域?在变量名前面尝试使用和不使用$,但没有运气。提前谢谢!
答案 0 :(得分:0)
事实证明,映射不是那么容易,而且版本参数没有“扩展”到控制器名称中。