2014-01-23 79 views
1

我有這樣的一個部分的路線:噴霧路由訪問URL路徑

... 
(pathEnd | path("summary")) { 
    parameters(...).as(Query) { query => 
     onSuccess(model ? query) { 
      case MyResponse(list) => 
       // at this point I would like to know if I hit pathEnd or 
       // path(summary) so I can complete with summary or full response. 
       if (???) 
        complete(OK, list) 
       else 
        complete(OK, list map (_.toSummary)) 
     } 
    } 
} 
... 

本質上有爭論,這是相同型號的查詢了很多參數的,但是我在做一個額外的改造如果總結端點被擊中,則迴應的部分數據會丟失。有沒有可能以某種方式做到這一點?

我試圖在(pathEnd | path("summary")) { ctx =>之後加入ctx =>,但那根本不起作用。 (路線不匹配,就再也沒有回來的任何東西)

+0

您可以使用'unmatchedPath'指令提取剩餘的路徑,然後調用'path.isEmpty'來檢查是否還有剩下的東西。那是你在找什麼? – jrudolph

+0

我想到了這一點,但它使得它不可能在其後的相同路線下有其他路線。 –

回答

1

我給這個自定義指令快速單元測試,它似乎工作:

def pathEndOr(p: String) = 
    pathEnd.hmap(true :: _) | path(p).hmap(false :: _) 

你可以用它在你比如像這樣:

... 
pathEndOr("summary") { isPathEnd => 
    parameters(...).as(Query) { query => 
     onSuccess(model ? query) { 
      case MyResponse(list) => 
       // at this point I would like to know if I hit pathEnd or 
       // path(summary) so I can complete with summary or full response. 
       if (isPathEnd) 
        complete(OK, list) 
       else 
        complete(OK, list map (_.toSummary)) 
     } 
    } 
} 
... 
+1

PS:當你開始工作時,它在分支'stories/pathEndOr'上:) – theon

+2

同事們通過堆棧溢出互相幫助,簡單真棒:) –