当我在我的喷雾应用程序中通过POST创建一个对象时,我想返回一个201状态,以及一个具有新创建的资源的绝对URI的位置头(包括我的应用程序的主机端口& contextRoot )。
下面是我的应用程序的一个示例代码片段..。
post {
respondWithHeaders(Location( fullyQualifiedUri("/movies"))) {
entity(as[MovieImpl]) { (movieToInsert: MovieImpl) => {
addMovies(movieToInsert)
complete("OK")
}
}
}
}请注意,我现在必须编写方法'fullyQualifiedUri‘来返回带有主机、端口等的URI。
附带说明:
我认为让Location头包含新创建的资源的绝对URI使我的REST客户端更加容易(尽管在这方面似乎有很多不同的观点)。
预先感谢您所能提供的任何指导。-chris
发布于 2015-09-21 09:03:38
要构建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)
}
}
}
}
}https://stackoverflow.com/questions/32687199
复制相似问题