scala - spray 中的便捷方法(即将成为 akka-http)创建带有主机端口和 contextRoot 的 Location header ?

标签 scala rest http-headers akka spray

当我在我的 Spray 应用程序中通过 POST 创建一个对象时,我想返回一个 201 状态,以及一个 Location header ,该 header 具有新创建资源的绝对 URI(包括主机端口和我的应用程序的 contextRoot)

这是我的应用程序中的示例代码片段...

post {
  respondWithHeaders(Location( fullyQualifiedUri("/movies"))) {
    entity(as[MovieImpl]) { (movieToInsert: MovieImpl) => {
      addMovies(movieToInsert)
      complete("OK")
    }
    }
  }
}

请注意,我现在必须编写“fullyQualifiedUri”方法来返回 一个带有主机、端口等的 URI。如果 Spray 能帮我做到这一点就好了 自动地。

边注:

我认为让 Location header 包含新的绝对 URI 创建的资源使我的 REST API 客户端更容易使用(尽管似乎对此有多种意见。)

提前感谢您提供的任何指导。 -克里斯

最佳答案

要构建 URI,您需要新创建资源的 ID。然后您可以使用 requestInstance 指令获取传入的请求 URI 并从中构建新的资源 URI。您还需要将返回码设置为 Created 以满足您的要求:

post {
  requestInstance { request =>
    val movieId = ???
    respondWithHeaders(Location( request.uri.withPath(request.uri.path / movieId))) {
      entity(as[MovieImpl]) { (movieToInsert: MovieImpl) => {
        addMovies(movieToInsert)
        complete(StatusCodes.Created)
      }
      }
    }
  }
}

关于scala - spray 中的便捷方法(即将成为 akka-http)创建带有主机端口和 contextRoot 的 Location header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32687199/

相关文章:

javascript - 无需 cookie 或本地存储的用户识别

java - 在 Java Controller 中检索 play.api.mvc.Request

javascript - 仅当 Angular Typescript 不为空时才发送可选的 Restful url 参数

java - Magento - 通过休息创建订单

html - Http 304 和缓存控制 : no-cache

python - Scrapy 只抓取 http header 数据

scala - Scala 集合中的可变与不可变

Scala 随机数生成器不生成范围之间的唯一随机数

scala - Slick - 第一个示例 - 我从哪里获得包含 "Database"包的 jar?

rest - 使用 REST API 设置共享点列表项的作者 ID