gpt4 book ai didi

scala - 喷雾路由 404 响应

转载 作者:行者123 更新时间:2023-12-03 14:53:29 25 4
gpt4 key购买 nike

我有一个服务,它在 future 返回一个 Option[ProductDoc](作为 akka 询问)

我如何在喷涂路由中做出响应,以便有效产品响应产品但未知但结构良好的产品返回 404?

我希望代码填补这里的空白:

get {
path("products" / PathElement) { productID:String =>
val productFuture = (productService ? ProductService.Get(productID)).mapTo[Option[ProductDoc]]

// THE CODE THAT GOES HERE SO THAT
// IF PRODUCT.ISDEFINED RETURN PRODUCT ELSE REJECT

}
}

我可以开始工作的唯一方法就是使用这个可憎的东西:
get {
path(PathElement) { productID:String =>
val productFuture = (productService ? ProductService.Get(productID)).mapTo[Option[ProductDoc]]
provide(productFuture).unwrapFuture.hflatMap {
case x => provide(x)
} { hResponse:shapeless.::[Option[ProductDoc], HNil] =>
hResponse.head match {
case Some(product) => complete(product)
case None => reject
}
}
}
}

这肯定不是实现这一目标的正确方法吗?这似乎是一个非常简单的模式,肯定已经有人解决了!

最佳答案

Spray 已经支持您的用例:一个选项值 None被编码到 EmptyEntity默认情况下。这可能是您在进行任何更改之前看到的:带有空文档的 200。有一个指令可以将空文档转换为 404,rejectEmptyResponse ,您将其环绕在您想要此行为的路线部分。

您的路线将如下所示:

  rejectEmptyResponse {
path("products" / PathElement) { productID:String =>
val productFuture = // same as before
complete(productFuture)
}
}

当然,你可以把 rejectEmptyResponse路径内部取决于您是否想用它包裹更多的路线部分。

更多信息:
  • https://github.com/spray/spray/blob/master/spray-routing/src/main/scala/spray/routing/directives/MiscDirectives.scala#L117
  • http://spray.io/documentation/spray-routing/key-concepts/rejections/#empty-rejections .
  • 关于scala - 喷雾路由 404 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15347088/

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