2017-01-13 2 views
1

In einigen Kontexten kann ich auf dem verbleibenden Pfad mit einem PathDirective übereinstimmen, um die Informationen zu erhalten, die ich über den Pfad benötige. Wenn zum Beispiel unten route direkt von Akka HTTP gebunden und behandelt wird, wird jede Anfrage den angeforderten Pfad wie gewünscht zurückgeben.Wie greife ich auf den vollständigen Pfad einer Anfrage in einer Akka HTTP-Anfrage zu?

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

Wenn jedoch die obige Route an anderer Stelle in der Anwendung kombiniert wird, die variable path oben kann nur einen Teil des angeforderten Pfades hält nicht die gewünschten Ergebnisse.

Zum Beispiel, wenn die tatsächliche Grenze Strecke sein soll,

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

Der „Echo /“ Teil des gesamten Weges wird von der Reaktion auf den Benutzer gegeben werden, fehlt.

Wie kann der vollständige Pfad zuverlässig abgerufen werden?

Antwort

1

Directives extractMatchedPath and extractUnmatchedPath können Sie den Pfad zugreifen, ohne den Pfad wie Sie path Direktive oben entspricht. Diese beiden können miteinander kombiniert werden, um den vollständigen Pfad zu konstruieren:

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

Allerdings ist es wahrscheinlich sauberer ist nur die Path aus der URI zu extrahieren direkt:

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

Beachten Sie, dass in beiden Fällen mussten wir .dropChars(1) anrufen um den anfänglichen Schrägstrich zu entfernen und konsistent mit der Ausgabe zu sein, die Sie mit der path Direktive erhalten haben.

Verwandte Themen