handleExceptions
Signature¶
def handleExceptions(handler: ExceptionHandler): Directive0
Description¶
Catches exceptions thrown by the inner route and handles them using the specified ExceptionHandler
.
Using this directive is an alternative to using a global implicitly defined ExceptionHandler
that applies to the complete route.
See Exception Handling for general information about options for handling exceptions.
Example¶
sourceval divByZeroHandler = ExceptionHandler {
case _: ArithmeticException => complete(StatusCodes.BadRequest, "You've got your arithmetic wrong, fool!")
}
val route =
path("divide" / IntNumber / IntNumber) { (a, b) =>
handleExceptions(divByZeroHandler) {
complete(s"The result is ${a / b}")
}
}
// tests:
Get("/divide/10/5") ~> route ~> check {
responseAs[String] shouldEqual "The result is 2"
}
Get("/divide/10/0") ~> route ~> check {
status shouldEqual StatusCodes.BadRequest
responseAs[String] shouldEqual "You've got your arithmetic wrong, fool!"
}
sourceimport static org.apache.pekko.http.javadsl.server.Directives.complete;
import static org.apache.pekko.http.javadsl.server.Directives.handleExceptions;
import static org.apache.pekko.http.javadsl.server.Directives.path;
final ExceptionHandler divByZeroHandler =
ExceptionHandler.newBuilder()
.match(
ArithmeticException.class,
x -> complete(StatusCodes.BAD_REQUEST, "You've got your arithmetic wrong, fool!"))
.build();
final Route route =
path(
PathMatchers.segment("divide").slash(integerSegment()).slash(integerSegment()),
(a, b) ->
handleExceptions(divByZeroHandler, () -> complete("The result is " + (a / b))));
// tests:
testRoute(route).run(HttpRequest.GET("/divide/10/5")).assertEntity("The result is 2");
testRoute(route)
.run(HttpRequest.GET("/divide/10/0"))
.assertStatusCode(StatusCodes.BAD_REQUEST)
.assertEntity("You've got your arithmetic wrong, fool!");
1.0.1