respondWithDefaultHeader

Signature

def respondWithDefaultHeader(responseHeader: HttpHeader): Directive0

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 HttpResponseHttpResponse and ChunkedResponseStart messages coming back from its inner route by potentially adding the given HttpHeaderHttpHeader 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
// 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
import static akka.http.javadsl.server.Directives.complete;
import static akka.http.javadsl.server.Directives.path;
import static akka.http.javadsl.server.Directives.respondWithDefaultHeader;
import static akka.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!");
Found an error in this documentation? The source code for this page can be found here. Please feel free to edit and contribute a pull request.