2017-01-13 80 views
1

在某些情況下,我可以使用PathDirective在剩餘路徑上匹配以獲取有關路徑的信息。例如,當下面route直接結合並通過HTTP阿卡處理,每個請求將根據需要回顯請求的路徑。如何訪問Akka HTTP請求中的請求的完整路徑?

val route = 
    path(Remaining) { path => 
    complete(path) 
    } 

然而,當在上述路徑中的申請的其他地方結合時,path可變以上可以僅保持不給所期望的結果所請求的路徑的一部分。

例如,如果實際結合的路線是是,

val actualRoute = pathPrefix("echo") { route } 

整體路徑的「回聲/」部分將從提供給用戶的響應丟失。

如何完整路徑可靠地訪問?

回答

1

Directives extractMatchedPath and extractUnmatchedPath讓你不喜歡你path指令上面做的路徑匹配的訪問路徑。這兩個可以結合起來,構建完整的路徑:

val route = 
    extractMatchedPath { matched => 
    extractUnmatchedPath { unmatched => 
     complete((matched.dropChars(1) ++ unmatched).toString) 
    } 
    } 

但是它可能是清潔剛提取的URI直接Path

val route = 
    extractUri { uri => 
    complete(uri.toRelative.path.dropChars(1).toString) 
    } 

注意,在這兩種情況下,我們需要調用.dropChars(1)放棄最初的斜線和與你有使用path指令的輸出一致。