headerValue

Traverses the list of request headers with the specified function and extracts the first value the function returns as Some(value).

Signature

def headerValue[T](f: HttpHeader  Option[T]): Directive1[T] 

Description

The headerValue directive is a mixture of map and find on the list of request headers. The specified function is called once for each header until the function returns Some(value). This value is extracted and presented to the inner route. If the function throws an exception the request is rejected with a MalformedHeaderRejection. If the function returns None for every header the request is rejected as “NotFound”.

This directive is the basis for building other request header related directives. See headerValuePF for a nicer syntactic alternative.

Example

def extractHostPort: HttpHeader => Option[Int] = {
  case h: `Host`=> Some(h.port)
  case x => None
}

val route =
  headerValue(extractHostPort) { port =>
    complete(s"The port was $port")
  }

Get("/") ~> Host("example.com", 5043) ~> route ~> check {
  responseAs[String] === "The port was 5043"
}
Get("/") ~> sealRoute(route) ~> check {
  status === NotFound
  responseAs[String] === "The requested resource could not be found."
}