Class PathDirectives

Direct Known Subclasses:
RangeDirectives

public abstract class PathDirectives extends ParameterDirectives
Only path prefixes are matched by these methods, since any kind of chaining path extractions in Java would just look cumbersome without operator overloads; hence, no PathMatcher for Java.

Just nest path() directives with the required types, ending in pathEnd() if you want to fail further paths.

  • Constructor Details

    • PathDirectives

      public PathDirectives()
  • Method Details

    • ignoreTrailingSlash

      public Route ignoreTrailingSlash(Supplier<Route> inner)
      Tries to match the inner route and if it fails with an empty rejection, it tries it again adding (or removing) the trailing slash on the given path.
      Parameters:
      inner - (undocumented)
      Returns:
      (undocumented)
    • path

      public Route path(String segment, Supplier<Route> inner)
      Matches a prefix to the remaining unmatched path after consuming a leading slash. The matcher has to match the remaining path completely. If matched the value matching the prefix is extracted on the directive level.
      Parameters:
      segment - (undocumented)
      inner - (undocumented)
      Returns:
      (undocumented)
    • path

      public Route path(Function<String,Route> inner)
    • path

      public Route path(PathMatcher0 p, Supplier<Route> inner)
      Applies the given PathMatcher0 to the remaining unmatched path after consuming a leading slash. The matcher has to match the remaining path completely. If matched the value extracted by the PathMatcher0 is extracted on the directive level.
      Parameters:
      p - (undocumented)
      inner - (undocumented)
      Returns:
      (undocumented)
    • path

      public <T> Route path(PathMatcher1<T> p, Function<T,Route> inner)
    • path

      public <T1, T2> Route path(PathMatcher2<T1,T2> p, BiFunction<T1,T2,Route> inner)
    • path

      public <T> Route path(Unmarshaller<String,T> t, Function<T,Route> inner)
      Consumes a leading slash and extracts the next path segment, unmarshalling it and passing the result to the inner function, expecting the full path to have been consumed then.
      Parameters:
      t - (undocumented)
      inner - (undocumented)
      Returns:
      (undocumented)
    • pathEnd

      public Route pathEnd(Supplier<Route> inner)
      Rejects the request if the unmatchedPath of the RequestContext is non-empty, or said differently: only passes on the request to its inner route if the request path has been matched completely.
      Parameters:
      inner - (undocumented)
      Returns:
      (undocumented)
    • pathEndOrSingleSlash

      public Route pathEndOrSingleSlash(Supplier<Route> inner)
      Only passes on the request to its inner route if the request path has been matched completely or only consists of exactly one remaining slash.

      Note that trailing slash and non-trailing slash URLs are '''not''' the same, although they often serve the same content. It is recommended to serve only one URL version and make the other redirect to it using redirectToTrailingSlashIfMissing(akka.http.javadsl.model.StatusCode, java.util.function.Supplier<akka.http.javadsl.server.Route>) or redirectToNoTrailingSlashIfPresent(akka.http.javadsl.model.StatusCode, java.util.function.Supplier<akka.http.javadsl.server.Route>) directive.

      For example:

      
       def route = {
         // redirect '/users/' to '/users', '/users/:userId/' to '/users/:userId'
         redirectToNoTrailingSlashIfPresent(Found) {
           pathPrefix("users") {
             concat(
               pathEnd {
                 // user list ...
               },
               path(UUID) { userId =>
                 // user profile ...
               }
             )
           }
         }
       }
       

      For further information, refer to: http://googlewebmastercentral.blogspot.de/2010/04/to-slash-or-not-to-slash.html

      Parameters:
      inner - (undocumented)
      Returns:
      (undocumented)
    • pathPrefix

      public Route pathPrefix(String segment, Supplier<Route> inner)
      Matches a prefix to the remaining unmatched path after consuming a leading slash. The matcher has to match a prefix of the remaining path. If matched the value matching the prefix is extracted on the directive level.
      Parameters:
      segment - (undocumented)
      inner - (undocumented)
      Returns:
      (undocumented)
    • pathPrefix

      public Route pathPrefix(Function<String,Route> inner)
    • pathPrefix

      public Route pathPrefix(PathMatcher0 p, Supplier<Route> inner)
      Applies the given PathMatcher0 to the remaining unmatched path after consuming a leading slash. The matcher has to match a prefix of the remaining path. If matched the value extracted by the PathMatcher is extracted on the directive level.
      Parameters:
      p - (undocumented)
      inner - (undocumented)
      Returns:
      (undocumented)
    • pathPrefix

      public <T> Route pathPrefix(PathMatcher1<T> p, Function<T,Route> inner)
    • pathPrefix

      public <T1, T2> Route pathPrefix(PathMatcher2<T1,T2> p, BiFunction<T1,T2,Route> inner)
    • pathPrefix

      public <T> Route pathPrefix(Unmarshaller<String,T> t, Function<T,Route> inner)
      Consumes a leading slash and extracts the next path segment, unmarshalling it and passing the result to the inner function.
      Parameters:
      t - (undocumented)
      inner - (undocumented)
      Returns:
      (undocumented)
    • pathPrefixTest

      public Route pathPrefixTest(String segment, Supplier<Route> inner)
      Checks whether the unmatchedPath of the RequestContext has a prefix matched by the given PathMatcher. In analogy to the pathPrefix directive a leading slash is implied.
      Parameters:
      segment - (undocumented)
      inner - (undocumented)
      Returns:
      (undocumented)
    • pathPrefixTest

      public Route pathPrefixTest(PathMatcher0 pm, Supplier<Route> inner)
    • pathPrefixTest

      public <T1> Route pathPrefixTest(PathMatcher1<T1> pm, Function<T1,Route> inner)
    • pathPrefixTest

      public <T1, T2> Route pathPrefixTest(PathMatcher2<T1,T2> pm, BiFunction<T1,T2,Route> inner)
    • pathSingleSlash

      public Route pathSingleSlash(Supplier<Route> inner)
      Only passes on the request to its inner route if the request path consists of exactly one remaining slash.
      Parameters:
      inner - (undocumented)
      Returns:
      (undocumented)
    • pathSuffix

      public Route pathSuffix(String segment, Supplier<Route> inner)
      Applies the given PathMatcher to a suffix of the remaining unmatchedPath of the RequestContext. If matched the value extracted by the PathMatcher0 is extracted and the matched parts of the path are consumed. Note that, for efficiency reasons, the given PathMatcher0 must match the desired suffix in reversed-segment order, i.e. pathSuffix("baz" / "bar") would match /foo/bar/baz!
      Parameters:
      segment - (undocumented)
      inner - (undocumented)
      Returns:
      (undocumented)
    • pathSuffix

      public Route pathSuffix(PathMatcher0 pm, Supplier<Route> inner)
    • pathSuffix

      public <T1> Route pathSuffix(PathMatcher1<T1> pm, Function<T1,Route> inner)
    • pathSuffix

      public <T1, T2> Route pathSuffix(PathMatcher2<T1,T2> pm, BiFunction<T1,T2,Route> inner)
    • pathSuffixTest

      public Route pathSuffixTest(String segment, Supplier<Route> inner)
      Checks whether the unmatchedPath of the RequestContext has a suffix matched by the given PathMatcher. However, as opposed to the pathSuffix directive the matched path is not actually "consumed". Note that, for efficiency reasons, the given PathMatcher must match the desired suffix in reversed-segment order, i.e. pathSuffixTest("baz" / "bar") would match /foo/bar/baz!
      Parameters:
      segment - (undocumented)
      inner - (undocumented)
      Returns:
      (undocumented)
    • pathSuffixTest

      public Route pathSuffixTest(PathMatcher0 pm, Supplier<Route> inner)
    • pathSuffixTest

      public <T1> Route pathSuffixTest(PathMatcher1<T1> pm, Function<T1,Route> inner)
    • pathSuffixTest

      public <T1, T2> Route pathSuffixTest(PathMatcher2<T1,T2> pm, BiFunction<T1,T2,Route> inner)
    • rawPathPrefix

      public Route rawPathPrefix(String segment, Supplier<Route> inner)
      Applies the given matcher directly to a prefix of the unmatched path of the RequestContext (i.e. without implicitly consuming a leading slash). The matcher has to match a prefix of the remaining path. If matched the value extracted by the PathMatcher is extracted on the directive level.
      Parameters:
      segment - (undocumented)
      inner - (undocumented)
      Returns:
      (undocumented)
    • rawPathPrefix

      public Route rawPathPrefix(PathMatcher0 pm, Supplier<Route> inner)
    • rawPathPrefix

      public <T1> Route rawPathPrefix(PathMatcher1<T1> pm, Function<T1,Route> inner)
    • rawPathPrefix

      public <T1, T2> Route rawPathPrefix(PathMatcher2<T1,T2> pm, BiFunction<T1,T2,Route> inner)
    • rawPathPrefixTest

      public Route rawPathPrefixTest(String segment, Supplier<Route> inner)
      Checks whether the unmatchedPath of the RequestContext has a prefix matched by the given PathMatcher. However, as opposed to the pathPrefix directive the matched path is not actually "consumed".
      Parameters:
      segment - (undocumented)
      inner - (undocumented)
      Returns:
      (undocumented)
    • rawPathPrefixTest

      public Route rawPathPrefixTest(PathMatcher0 pm, Supplier<Route> inner)
    • rawPathPrefixTest

      public <T1> Route rawPathPrefixTest(PathMatcher1<T1> pm, Function<T1,Route> inner)
    • rawPathPrefixTest

      public <T1, T2> Route rawPathPrefixTest(PathMatcher2<T1,T2> pm, BiFunction<T1,T2,Route> inner)
    • redirectToNoTrailingSlashIfPresent

      public Route redirectToNoTrailingSlashIfPresent(StatusCode redirectionType, Supplier<Route> inner)
      If the request path ends with a slash, redirect to the same uri without trailing slash in the path.

      '''Caveat''': pathSingleSlash(java.util.function.Supplier<akka.http.javadsl.server.Route>) directive will not match inside of this directive.

      Parameters:
      redirectionType - A status code from StatusCodes, which must be a redirection type.
      inner - (undocumented)
      Returns:
      (undocumented)
    • redirectToTrailingSlashIfMissing

      public Route redirectToTrailingSlashIfMissing(StatusCode redirectionType, Supplier<Route> inner)
      If the request path doesn't end with a slash, redirect to the same uri with trailing slash in the path.

      '''Caveat''': path(java.lang.String, java.util.function.Supplier<akka.http.javadsl.server.Route>) without trailing slash and pathEnd(java.util.function.Supplier<akka.http.javadsl.server.Route>) directives will not match inside of this directive.

      Parameters:
      redirectionType - A status code from StatusCodes, which must be a redirection type.
      inner - (undocumented)
      Returns:
      (undocumented)