gpt4 book ai didi

scala - Akka HTTP 根据 Future 的结果设置响应头

转载 作者:行者123 更新时间:2023-12-04 19:49:38 25 4
gpt4 key购买 nike

我正在使用 Akka-HTTP 2.0-M2 设计 REST 服务,遇到过这样一种情况,我想提供额外的 header ,这些 header 取决于被查询的 Actor 的回复。

目前,我有以下......

val route = {
path("oncologist") {
get {
parameters('active.as[Boolean].?, 'skip.as[Int].?, 'limit.as[Int].?).as(GetAllOncologists) {
req =>
complete {
(oncologistActor ? req).mapTo[OncologistList]
}
}
}
}

虽然这会毫无问题地返回。我想将 OncologistList 的一些属性移到响应 header 中,而不是将它们返回到正文中。也就是说,我要返回总记录数和偏移量,并且我想生成一个上一个和下一个 URL header 值以供客户端使用。我不知道如何继续。

最佳答案

我想你可以使用 onCompleterespondWithHeaders指令来完成你想要的。 onComplete指令与 Future 的结果一起工作这正是ask (?)将返回。这是一个使用案例类的示例:

case class Foo(id:Int, name:String)

一条简单的路线显示onComplete像这样:

get{
parameters('active.as[Boolean].?, 'skip.as[Int].?, 'limit.as[Int].?).as(GetAllOncologists) { req =>
val fut = (oncologistActor ? req).mapTo[Foo]
onComplete(fut){
case util.Success(f) =>
val headers = List(
RawHeader("X-MyObject-Id", f.id.toString),
RawHeader("X-MyObject-Name", f.name)
)
respondWithHeaders(headers){
complete(StatusCodes.OK)
}

case util.Failure(ex) =>
complete(StatusCodes.InternalServerError )
}
}
}

所以如果我们从 ask 得到一个成功的结果在 oncologistActor然后我们可以利用 respondWithHeaders向响应添加一些自定义 header 。希望这就是您要找的。

关于scala - Akka HTTP 根据 Future 的结果设置响应头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34441576/

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