gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:18:20 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com