У меня есть служба, которая возвращает один вариант [ProductDoc] в будущем (как Akka спросить)спрей маршрутизации 404 ответ
Как реагировать маршрутизации спрея, так что действительный repsonds продукт с продуктом, но неизвестно но хорошо сформированный возвращает 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
}
}
}
}
Это не может быть правильным способом для достижения этого, конечно? Это похоже на довольно простой шаблон, который, должно быть, кто-то уже решил!
Означает ли это, что мое обещание должно вернуть успех, но с пустым ответом, когда у меня есть ошибка в моей логике или слое dao? –
Я не совсем понимаю, чего вы хотите достичь. Эта тема была о 'Future [Option [T]]'. Используя вышеприведенную структуру, вы можете вернуть 'Success (Some (x))' для регулярного ответа, 'Success (None)' for 404 и 'Failure (x)' для генерации ответа об ошибке. Это то, что вы просите? Если у вас есть более конкретный вопрос, пожалуйста, спросите в списке рассылки распылителя. – jrudolph
Мне не кажется, что Spray действительно поддерживает этот прецедент. Что относительно 200 пустого ответа, например, команда удаления? Станет ли он 404? – dividebyzero