grails UrlMapping用于特定于版本的API控制器

时间:2016-05-19 08:03:12

标签: spring grails

我正在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控制器中的语法:区域?在变量名前面尝试使用和不使用$,但没有运气。提前谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明,映射不是那么容易,而且版本参数没有“扩展”到控制器名称中。