This documentation regards version 10.1, however the current version is 10.7.0 .
mapRouteResultFuture
Signature
def mapRouteResultFuture ( f : Future [ RouteResult ] => Future [ RouteResult ]): Directive0
Description
Asynchronous version of mapRouteResult .
It’s similar to mapRouteResultWith , however it’s Future[RouteResult] => Future[RouteResult]
Function<CompletionStage<RouteResult>, CompletionStage<RouteResult>>
instead of RouteResult => Future[RouteResult]
Function<RouteResult, CompletionStage<RouteResult>>
which may be useful when combining multiple transformations and / or wanting to recover
from a failed route result.
See Result Transformation Directives for similar directives.
Example
Scala
copy source val tryRecoverAddServer = mapRouteResultFuture { fr =>
fr recover {
case ex : IllegalArgumentException =>
Complete ( HttpResponse ( StatusCodes . InternalServerError ))
} map {
case Complete ( res ) => Complete ( res . addHeader ( Server ( "MyServer 1.0" )))
case rest => rest
}
}
val route =
tryRecoverAddServer {
complete ( "Hello world!" )
}
// tests:
Get ( "/" ) ~> route ~> check {
status shouldEqual StatusCodes . OK
header [ Server ] shouldEqual Some ( Server ( "MyServer 1.0" ))
}
Java
copy source import static akka . http . javadsl . server . Directives . mapRouteResultFuture ;
final Route route = mapRouteResultFuture ( cr ->
cr . exceptionally ( t -> {
if ( t instanceof IllegalArgumentException ) {
return RouteResults . complete (
HttpResponse . create (). withStatus ( StatusCodes . INTERNAL_SERVER_ERROR ));
} else {
return null ;
}
}). thenApply ( rr -> {
if ( rr instanceof Complete ) {
final HttpResponse res = (( Complete ) rr ). getResponse ();
return RouteResults . complete (
res . addHeader ( Server . create ( ProductVersion . create ( "MyServer" , "1.0" ))));
} else {
return rr ;
}
}), () -> complete ( "Hello world!" ));
// tests:
testRoute ( route ). run ( HttpRequest . GET ( "/" ))
. assertStatusCode ( StatusCodes . OK )
. assertHeaderExists ( Server . create ( ProductVersion . create ( "MyServer" , "1.0" )));
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.