2013-08-27 69 views
0

我有顏色和陰影的映射。每種顏色都可以有多種色調。什麼是獲取子資源的URL映射的方法

我怎樣才能得到如下映射:「color/5/shades」。有了這個,我希望顯示的顏色標識形形色色5.

目前我的映射是這樣的:

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

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

回答

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服務的默認項假設。

+0

嗯我不認爲我可以刪除由grails提供的默認映射。如果我刪除它,那麼我的其他控制器很多都會中斷,包括彈簧安全的映射 – Anthony

+0

@Anthony那很好。我想我會照顧它的。看看'id'的驗證器。 :)讓我知道如果任何部分的答案是不可理解的。我會很樂意澄清。 – dmahapatro