什么是获取子资源的URL映射的方法

时间:2013-08-27 00:37:46

标签: grails url-mapping

我有颜色和阴影的映射。每种颜色都可以有多种色调。

我怎样才能有如下映射:“color/5/shades”。有了这个,我希望显示颜色Id 5的所有阴影。

目前我的映射是这样的:

    "/colors"(controller: "color", parseRequest: true){
        action = [GET: "list"]
    }

    "/color/$id" (resource: "color"){
        constraints {
            id validator: {
                !(it in ['create', 'detail')
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

Grails 2.3 is concerned可以轻松映射。

//Grails 2.3
"/color"(resources:'color') {
  "/shades"(resources:"shade")
}

然后您可以访问/color/${id}/shades

Grails 2.2.4或更低时,我认为您的UrlMapping可以更优化,如下所示:

class UrlMappings {
    static mappings = {
        "/colors/$id?/$shades?" (resource: "color"){
            constraints {
                shades validator: {
                    it in ['shades']
                }
                id validator: {it.isNumber()}
            }
        }

        "/"(view:"/index")
        "500"(view:'/error')
    }
}


//controller action corresponding
//GET 
def show(){
   if(params.id){
       if(params.shades){
          //If both id and shades present in URL
          //then getShades
          //maps to "/colors/5/shades"
          getShades()
       } else {
          //If only id provided then GET color
          //maps to "/colors/5"
          getColor()
       }
   } else {
       //If id not provided the list all colors
       //maps to "/colors"
       listColors()
   }
}

private def getShades(){...}
private def getColor(){...}
private def listColors(){...}

注意
请注意删除grails提供的默认映射

//remove
"/$controller/$action?/$id?"{
    constraints {
      // apply constraints here
    }
}

删除默认条目背后的基本原理: -
如果删除此条目,则不会使用(createdetail)的其他验证器,假设您没有使用REST服务的默认条目。