redirect
Signature¶
def redirect(uri: Uri, redirectionType: Redirection): StandardRoute
Description¶
Completes the request with a redirection response to a given target URI and of a given redirection type (status code).
redirect
is a convenience helper for completing the request with a redirection response. It is equivalent to this snippet relying on the complete
method on RequestContext
, and a directive is also available:
sourcecomplete(HttpResponse(
status = redirectionType,
headers = headers.Location(uri) :: Nil,
entity = redirectionType.htmlTemplate match {
case "" => HttpEntity.Empty
case template => HttpEntity(ContentTypes.`text/html(UTF-8)`, template.format(uri))
}))
sourcerc.completeWith(
HttpResponse.create().withStatus(redirectionType).addHeader(Location.create(uri))
Example¶
sourceval route =
pathPrefix("foo") {
concat(
pathSingleSlash {
complete("yes")
},
pathEnd {
redirect("/foo/", StatusCodes.PermanentRedirect)
})
}
// tests:
Get("/foo/") ~> route ~> check {
responseAs[String] shouldEqual "yes"
}
Get("/foo") ~> route ~> check {
status shouldEqual StatusCodes.PermanentRedirect
responseAs[String] shouldEqual """The request, and all future requests should be repeated using <a href="/foo/">this URI</a>."""
}
sourceimport static org.apache.pekko.http.javadsl.server.Directives.complete;
import static org.apache.pekko.http.javadsl.server.Directives.pathEnd;
import static org.apache.pekko.http.javadsl.server.Directives.pathPrefix;
import static org.apache.pekko.http.javadsl.server.Directives.pathSingleSlash;
import static org.apache.pekko.http.javadsl.server.Directives.redirect;
final Route route =
pathPrefix(
"foo",
() ->
concat(
pathSingleSlash(() -> complete("yes")),
pathEnd(() -> redirect(Uri.create("/foo/"), StatusCodes.PERMANENT_REDIRECT))));
// tests:
testRoute(route).run(HttpRequest.GET("/foo/")).assertEntity("yes");
testRoute(route)
.run(HttpRequest.GET("/foo"))
.assertStatusCode(StatusCodes.PERMANENT_REDIRECT)
.assertEntity(
"The request, and all future requests should be repeated using <a href=\"/foo/\">this URI</a>.");
1.1.0