pathSingleSlash

Signature

def pathSingleSlash: Directive0

Description

Only passes the request to its inner route if the unmatched path of the RequestContextRequestContext contains exactly one single slash.

This directive is a simple alias for pathPrefix(PathEnd) and is mostly used for matching requests to the root URI (/) on an inner-level to discriminate “all path segments matched” from other alternatives (see the example below). For a comparison between path directives check Overview of path directives.

Example

Scala
val route =
  concat(
    pathSingleSlash {
      complete("root")
    },
    pathPrefix("ball") {
      concat(
        pathSingleSlash {
          complete("/ball/")
        },
        path(IntNumber) { int =>
          complete(if (int % 2 == 0) "even ball" else "odd ball")
        }
      )
    }
  )

// tests:
Get("/") ~> route ~> check {
  responseAs[String] shouldEqual "root"
}

Get("/ball") ~> route ~> check {
  handled shouldEqual false
}

Get("/ball/") ~> route ~> check {
  responseAs[String] shouldEqual "/ball/"
}

Get("/ball/1337") ~> route ~> check {
  responseAs[String] shouldEqual "odd ball"
}
Java
import static akka.http.javadsl.server.Directives.complete;
import static akka.http.javadsl.server.Directives.path;
import static akka.http.javadsl.server.Directives.pathPrefix;
import static akka.http.javadsl.server.Directives.pathSingleSlash;
final Route route =
    concat(
        pathSingleSlash(() -> complete("root")),
        pathPrefix("ball", () ->
            concat(
                pathSingleSlash(() -> complete("/ball/")),
                path(integerSegment(), (i) -> complete((i % 2 == 0) ? "even ball" : "odd ball"))
            )
        )
    );
// tests:
testRoute(route).run(HttpRequest.GET("/")).assertEntity("root");
testRoute(route).run(HttpRequest.GET("/ball")).assertStatusCode(StatusCodes.NOT_FOUND);
testRoute(route).run(HttpRequest.GET("/ball/")).assertEntity("/ball/");
testRoute(route).run(HttpRequest.GET("/ball/1337")).assertEntity("odd ball");
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.