我正在使用喷雾来暴露周到的服务。因为在大多数服务中都有共同模式,所以我使用"&"为它创建别名。如下:
def getPath(path1: String) = path(path1) & get & detach() & complete
这段代码写在特征内部MyService使用Json4sSupport扩展HttpService,如果你试图单独编译它,你可能要写这样的
def getPath(path1: String)(implicit ec: ExecutionContext) = path(path1) & spray.routing.Directives.get & detach() & complete
并且使用它在途中很容易:
~ getPath("person2") { xxx }
//works as
//path("person1") {
// get {
// detach() {
// complete {
// println("receiving request /person1")
// something
// }
// }
// }
// }
但我不知道如何为帖子创建相同的别名:
path("account" / "transaction") {
post {
entity(as[TransferRequest]) { transferReq =>
detach() {
complete {
//doing transfer
}
}
}
}
}
我已经尝试了
def postPath[T](path1: String) = path(path1) & post & entity(as[T]) & detach() & complete
但是没有工作,没有去哪里获得" transferReq"参数。 我应该如何定义以获得我想要的东西?
答案 0 :(得分:2)
complete
不是一个可组合的指令,把它拿出来你就是好人。试试这个
def postPath[T](path1: String)(implicit um:FromRequestUnmarshaller[T], ec: ExecutionContext): Directive1[T] =
path(path1) & post & entity(as[T]) & detach(())
然后在您的通话网站中,像这样使用
import concurrent.ExecutionContext.Implicits.global
postPath[String]("123").apply { s =>
complete (s + "abc")
}