У меня есть служба, которая возвращает параметр [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
}
}
}
}
Это не может быть правильным способом достичь этого, верно? Это похоже на довольно простой шаблон, который, должно быть, кто-то уже решил!