【问题标题】:Grails UrlMappings for Rest and other actions用于 Rest 和其他操作的 Grails UrlMappings
【发布时间】:2015-10-30 07:17:10
【问题描述】:

我有一个控制器,主要用于使用 showupdatesavedelete 操作进行 REST 通信。这在UrlMappings.groovy 文件中进行了相应的映射,并且工作正常。

然后我需要在同一个控制器中调用 getAccountTypesByEnv 操作,但我在设置一个实际有效的语法时遇到了一些麻烦。

以下定义有效,但我想知道是否有更简单、更正确的方法。

"/ext/accounttype/$id?"(controller: "accountType") {
    action = [GET: 'show', PUT: 'update', POST: 'save', DELETE: 'delete']
    "/ext/accounttype/getAccountTypesByEnv"(controller: "accountType", action: "getAccountTypesByEnv")
}

更新

我最终将其划分为 2 个单独的通用映射,如下所示:

"/ext/$controller/$id?" {
     action = [GET: 'show', PUT: 'update', POST: 'save', DELETE: 'delete']
}

"/ext/$controller/action/$customAction?" {
     action = { return params.customAction }
}

【问题讨论】:

    标签: grails


    【解决方案1】:

    您可以在UrlMappings.groovy 中定义如下:

     "/ext/$controller/$resourceId?/$customAction?" {
        action = {
            Map actionMethodMap = [GET: params.resourceId ? "show" : "index", POST: "save", PUT: "update", DELETE: "delete"]
    
            return params.customAction ?: actionMethodMap[request.method.toUpperCase()]
        }
        id = {
            if (params.resourceId == "action") {
                return params.id
            }
            return params.resourceId
        }
    }
    

    这是我认为目前最通用的UrlMapping,您可以通过以下方式在这里使用它:

    GET     "/ext/accounttype" will call **index** action of AccounttypeController
    POST    "/ext/accounttype" will call save action of AccounttypeController
    PUT     "/ext/accounttype/14" will call update action of AccounttypeController with id 14
    DELETE  "/ext/accounttype/14" will call update action of AccounttypeController with id 14
    GET     "/ext/accounttype/14" will call show action of AccounttypeController with id 14
    GET     "/ext/accounttype/action/getAccountTypesByEnv" will call getAccountTypesByEnv action of AccounttypeController with null id
    GET     "/ext/accounttype/action/getAccountTypesByEnv?id=143" will call getAccountTypesByEnv action of AccounttypeController with id 143
    

    【讨论】:

    • 非常好。我会在那个星期一测试。控制器外壳问题怎么办?您的建议不是暗示 $controller 是 'accountType' 而不是 'accounttype' 吗?
    • 当然。是的,示例中的控制器名称可以是accountType
    • 我在让它工作时遇到了一些问题,但你的解决方案启发我使用一个通用的解决方案,我只使用 2 个单独的映射。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多