Future で Option[ProductDoc] を返すサービスがあります (akka ask として)
スプレー ルーティングで、有効な製品は製品に応答するが、不明だが適切に形成された製品は 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
}
}
}
}
これは、これを達成するための正しい方法ではありませんよね? これはかなり単純なパターンのように思えますが、すでに誰かによって解決されているはずです!