validate
Allows validating a precondition before handling a route.
Signature¶
def validate(check:
Description¶
Checks an arbitrary condition and passes control to the inner route if it returns true
. Otherwise, rejects the request with a ValidationRejection
containing the given error message.
Example¶
sourceval route =
extractUri { uri =>
validate(uri.path.toString.size < 5, s"Path too long: '${uri.path.toString}'") {
complete(s"Full URI: $uri")
}
}
// tests:
Get("/234") ~> route ~> check {
responseAs[String] shouldEqual "Full URI: http://example.com/234"
}
Get("/abcdefghijkl") ~> route ~> check {
rejection shouldEqual ValidationRejection("Path too long: '/abcdefghijkl'", None)
}
sourceimport static org.apache.pekko.http.javadsl.server.Directives.extractUri;
import static org.apache.pekko.http.javadsl.server.Directives.validate;
final Route route =
extractUri(
uri ->
validate(
() -> uri.path().length() < 5,
"Path too long: " + uri.path(),
() -> complete("Full URI: " + uri.toString())));
// tests:
testRoute(route).run(HttpRequest.GET("/234")).assertEntity("Full URI: http://example.com/234");
testRoute(route)
.run(HttpRequest.GET("/abcdefghijkl"))
.assertEntity("Path too long: /abcdefghijkl");
1.0.1