encodeResponseWith
Signature¶
def encodeResponseWith(first: Encoder, more: Encoder*): Directive0
Description¶
Encodes the response with the encoding that is requested by the client via the Accept-Encoding
if it is among the provided encoders or rejects the request with an UnacceptedResponseEncodingRejection(supportedEncodings)
.
The response encoding is determined by the rules specified in RFC7231.
If the Accept-Encoding
header is missing then the response is encoded using the first
encoder.
If the Accept-Encoding
header is empty and NoCoding
is part of the encoders then no response encoding is used. Otherwise the request is rejected.
Example¶
sourceval route = encodeResponseWith(Coders.Gzip) { complete("content") }
// tests:
Get("/") ~> route ~> check {
response should haveContentEncoding(gzip)
}
Get("/") ~> `Accept-Encoding`(gzip, deflate) ~> route ~> check {
response should haveContentEncoding(gzip)
}
Get("/") ~> `Accept-Encoding`(deflate) ~> route ~> check {
rejection shouldEqual UnacceptedResponseEncodingRejection(gzip)
}
Get("/") ~> `Accept-Encoding`(identity) ~> route ~> check {
rejection shouldEqual UnacceptedResponseEncodingRejection(gzip)
}
// with custom compression level:
val routeWithLevel9 = encodeResponseWith(Coders.Gzip(compressionLevel = 9)) { complete("content") }
Get("/") ~> routeWithLevel9 ~> check {
response should haveContentEncoding(gzip)
}
sourceimport static org.apache.pekko.http.javadsl.server.Directives.complete;
import static org.apache.pekko.http.javadsl.server.Directives.encodeResponseWith;
final Route route =
encodeResponseWith(Collections.singletonList(Coder.Gzip), () -> complete("content"));
// tests:
testRoute(route)
.run(HttpRequest.GET("/"))
.assertHeaderExists(ContentEncoding.create(HttpEncodings.GZIP));
testRoute(route)
.run(
HttpRequest.GET("/")
.addHeader(AcceptEncoding.create(HttpEncodings.GZIP))
.addHeader(AcceptEncoding.create(HttpEncodings.DEFLATE)))
.assertHeaderExists(ContentEncoding.create(HttpEncodings.GZIP));
runRouteUnSealed(
route, HttpRequest.GET("/").addHeader(AcceptEncoding.create(HttpEncodings.DEFLATE)))
.assertRejections(Rejections.unacceptedResponseEncoding(HttpEncodings.GZIP));
runRouteUnSealed(
route, HttpRequest.GET("/").addHeader(AcceptEncoding.create(HttpEncodings.IDENTITY)))
.assertRejections(Rejections.unacceptedResponseEncoding(HttpEncodings.GZIP));
final Route routeWithLevel9 =
encodeResponseWith(Collections.singletonList(Coder.GzipLevel9), () -> complete("content"));
testRoute(routeWithLevel9)
.run(HttpRequest.GET("/"))
.assertHeaderExists(ContentEncoding.create(HttpEncodings.GZIP));
1.0.1