method
Matches HTTP requests based on their method.
Signature
/**
* Rejects all requests whose HTTP method does not match the given one.
*/
def method(httpMethod: HttpMethod): Directive0 =
extract(_.request.method).flatMap[HNil] {
case `httpMethod` ⇒ pass
case _ ⇒ reject(MethodRejection(httpMethod))
} & cancelAllRejections(ofType[MethodRejection])
Description
This directive filters the incoming request by its HTTP method. Only requests with
the specified method are passed on to the inner route. All others are rejected with a
MethodRejection
, which is translated into a 405 Method Not Allowed
response
by the default RejectionHandler.
Example
val route = method(HttpMethods.PUT) { complete("This is a PUT request.") }
Put("/", "put content") ~> route ~> check {
responseAs[String] === "This is a PUT request."
}
Get("/") ~> sealRoute(route) ~> check {
status === StatusCodes.MethodNotAllowed
responseAs[String] === "HTTP method not allowed, supported methods: PUT"
}