respondWithDefaultHeader
Description
Adds a given HTTP header to all responses coming back from its inner route only if a header with the same name doesn’t exist yet in the response.
This directive transforms HttpResponse
HttpResponse
and ChunkedResponseStart
messages coming back from its inner route by potentially adding the given HttpHeader
HttpHeader
instance to the headers list. The header is only added if there is no header instance with the same name (case insensitively) already present in the response.
See also respondWithDefaultHeaders if you’d like to add more than one header.
Example
- Scala
-
source
// custom headers val blippy = RawHeader("X-Fish-Name", "Blippy") val elTonno = RawHeader("X-Fish-Name", "El Tonno") // format: OFF // by default always include the Blippy header, // unless a more specific X-Fish-Name is given by the inner route val route = respondWithDefaultHeader(blippy) { // blippy respondWithHeader(elTonno) { // / el tonno path("el-tonno") { // | / complete("¡Ay blippy!") // | |- el tonno } ~ // | | path("los-tonnos") { // | | complete("¡Ay ay blippy!") // | |- el tonno } // | | } ~ // | x complete("Blip!") // |- blippy } // x // format: ON // tests: Get("/") ~> route ~> check { header("X-Fish-Name") shouldEqual Some(RawHeader("X-Fish-Name", "Blippy")) responseAs[String] shouldEqual "Blip!" } Get("/el-tonno") ~> route ~> check { header("X-Fish-Name") shouldEqual Some(RawHeader("X-Fish-Name", "El Tonno")) responseAs[String] shouldEqual "¡Ay blippy!" } Get("/los-tonnos") ~> route ~> check { header("X-Fish-Name") shouldEqual Some(RawHeader("X-Fish-Name", "El Tonno")) responseAs[String] shouldEqual "¡Ay ay blippy!" }
- Java
-
source
import static org.apache.pekko.http.javadsl.server.Directives.complete; import static org.apache.pekko.http.javadsl.server.Directives.path; import static org.apache.pekko.http.javadsl.server.Directives.respondWithDefaultHeader; import static org.apache.pekko.http.javadsl.server.Directives.respondWithHeader; // custom headers final RawHeader blippy = RawHeader.create("X-Fish-Name", "Blippy"); final RawHeader elTonno = RawHeader.create("X-Fish-Name", "El Tonno"); // format: OFF // by default always include the Blippy header, // unless a more specific X-Fish-Name is given by the inner route final Route route = respondWithDefaultHeader( blippy, () -> // blippy respondWithHeader( elTonno, () -> // / el tonno path( "el-tonno", () -> // | / complete("¡Ay blippy!") // | |- el tonno ) .orElse( // | | path( "los-tonnos", () -> // | | complete("¡Ay ay blippy!") // | |- el tonno ) // | | ) // | | ) .orElse( // | x complete("Blip!") // |- blippy ) // x ); // format: ON testRoute(route) .run(HttpRequest.GET("/")) .assertHeaderExists("X-Fish-Name", "Blippy") .assertEntity("Blip!"); testRoute(route) .run(HttpRequest.GET("/el-tonno")) .assertHeaderExists("X-Fish-Name", "El Tonno") .assertEntity("¡Ay blippy!"); testRoute(route) .run(HttpRequest.GET("/los-tonnos")) .assertHeaderExists("X-Fish-Name", "El Tonno") .assertEntity("¡Ay ay blippy!");
1.0.1