headerValueByType
Loading

headerValueByType

Signature

def headerValueByType[T <: HttpHeader: ClassTag](): Directive1[T]

The signature shown is simplified, the real signature uses magnets. [1]

[1]See The Magnet Pattern for an explanation of magnet-based overloading.

Description

Traverses the list of request headers and extracts the first header of the given type.

The headerValueByType directive finds a header of the given type in the list of request header. If no header of the given type is found the request is rejected with a MissingHeaderRejection.

If the header is expected to be missing in some cases or to customize handling when the header is missing use the optionalHeaderValueByType directive instead.

Example

val route =
  headerValueByType[Origin]() { origin 
    complete(s"The first origin was ${origin.origins.head}")
  }

val originHeader = Origin(HttpOrigin("http://localhost:8080"))

// tests:
// extract a header if the type is matching
Get("abc") ~> originHeader ~> route ~> check {
  responseAs[String] shouldEqual "The first origin was http://localhost:8080"
}

// reject a request if no header of the given type is present
Get("abc") ~> route ~> check {
  inside(rejection) { case MissingHeaderRejection("Origin")  }
}

Contents