mapUnmatchedPath • Akka HTTP (original) (raw)
Signature
def mapUnmatchedPath(f: Uri.Path => Uri.Path): Directive0
Description
Transforms the unmatchedPath field of the request context for inner routes.
The mapUnmatchedPath
directive is used as a building block for writing Custom Directives. You can use it for implementing custom path matching directives.
Use extractUnmatchedPath
for extracting the current value of the unmatched path.
Example
Scala
source`def ignore456(path: Uri.Path) = path match { case s @ Uri.Path.Segment(head, tail) if head.startsWith("456") => val newHead = head.drop(3) if (newHead.isEmpty) tail else s.copy(head = head.drop(3)) case _ => path } val ignoring456 = mapUnmatchedPath(ignore456)
val route = pathPrefix("123") { ignoring456 { path("abc") { complete("Content") } } }
// tests: Get("/123/abc") ~> route ~> check { responseAs[String] shouldEqual "Content" } Get("/123456/abc") ~> route ~> check { responseAs[String] shouldEqual "Content" }`
Java
source`import static akka.http.javadsl.server.Directives.mapUnmatchedPath;
final Function<String, String> ignore456 = path -> { int slashPos = path.indexOf("/"); if (slashPos != -1) { String head = path.substring(0, slashPos); String tail = path.substring(slashPos); if (head.length() <= 3) { return tail; } else { return path.substring(3); } } else { return path; } };
final Route route = pathPrefix("123", () -> mapUnmatchedPath(ignore456, () -> path("abc", () -> complete("Content") ) ) );
// tests: testRoute(route).run(HttpRequest.GET("/123/abc")) .assertEntity("Content"); testRoute(route).run(HttpRequest.GET("/123456/abc")) .assertEntity("Content");`
Found an error in this documentation? The source code for this page can be found here. Please feel free to edit and contribute a pull request.