handle
Signature
def handle(handler: HttpRequest
def handle(handler: PartialFunction[HttpRequest, Future[HttpResponse]]): StandardRoute
def handle( handler: PartialFunction[HttpRequest, Future[HttpResponse]], rejections: Seq[Rejection]): StandardRoute Description
Creates a RouteRoute that handles the request using a function or PartialFunction from HttpRequestHttpRequest to a FutureCompletionStage of HttpResponseHttpResponse.
This directive can be used to include external components request processing components defined as a Function or PartialFunction (like those provided by pekko-grpc) into a routing tree defined by directives and routes.
For the PartialFunction variant, the given list of rejections will be used to reject the request with if the PartialFunction is not defined for a request. By default, an empty list of rejections will be used which is interpreted as “Not Found”.
There is also a strict version called handleSync.
Example
- Scala
-
source
val handler: PartialFunction[HttpRequest, Future[HttpResponse]] = { case HttpRequest(HttpMethods.GET, Uri.Path("/value"), _, _, _) => Future.successful(HttpResponse(entity = "23")) } val route = concat( handle(handler), complete("fallback")) // tests: Get("/value") ~> route ~> check { status shouldEqual StatusCodes.OK responseAs[String] shouldEqual "23" } // Uri doesn't match so function is never invoked and the request is rejected and the // fallback completes the request. Get("/other") ~> route ~> check { status shouldEqual StatusCodes.OK responseAs[String] shouldEqual "fallback" }
1.2.0