当我在我的 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/