overrideMethodWithParameter

overrideMethodWithParameter

Signature

Description

Changes the request method to the value of the specified query parameter.

Changes the HTTP method of the request to the value of the specified query string parameter. If the query string parameter is not specified this directive has no effect.

If the query string is specified as something that is not a HTTP method, then this directive completes the request with a 501 Not Implemented response.

This directive is useful for:

  • Use in combination with JSONP (JSONP only supports GET)
  • Supporting older browsers that lack support for certain HTTP methods. E.g. IE8 does not support PATCH

Example

val route =
  overrideMethodWithParameter("method") {
    get {
      complete("This looks like a GET request.")
    } ~
      post {
        complete("This looks like a POST request.")
      }
  }

// tests:
Get("/?method=POST") ~> route ~> check {
  responseAs[String] shouldEqual "This looks like a POST request."
}
Post("/?method=get") ~> route ~> check {
  responseAs[String] shouldEqual "This looks like a GET request."
}

Get("/?method=hallo") ~> route ~> check {
  status shouldEqual StatusCodes.NotImplemented
}

Contents