Scala 喷涂布线适用于单斜线,但不适用于其他任何情况
所以我以前问过这个问题,并且修改了很多代码 现在,我正在执行在detach()块中返回httpresponse的函数,这样我就不会阻塞。然后这些都完成并返回给客户,但我似乎仍然无法让我的路由正常工作 在我的测试中,对单个斜杠的请求可以正常工作,但其他任何操作,例如下面显示的创建用户路径,都会失败。我似乎不明白为什么,而喷洒路线使用了如此多的构造,我很难弄清楚系统是如何工作的,足以找出发生了什么 我尝试在某些路径周围插入logRequest块,以为这可能会告诉我发生了什么,但它们似乎都没有被击中。任何帮助都将不胜感激Scala 喷涂布线适用于单斜线,但不适用于其他任何情况,scala,routing,akka,spray,spray-routing,Scala,Routing,Akka,Spray,Spray Routing,所以我以前问过这个问题,并且修改了很多代码 现在,我正在执行在detach()块中返回httpresponse的函数,这样我就不会阻塞。然后这些都完成并返回给客户,但我似乎仍然无法让我的路由正常工作 在我的测试中,对单个斜杠的请求可以正常工作,但其他任何操作,例如下面显示的创建用户路径,都会失败。我似乎不明白为什么,而喷洒路线使用了如此多的构造,我很难弄清楚系统是如何工作的,足以找出发生了什么 我尝试在某些路径周围插入logRequest块,以为这可能会告诉我发生了什么,但它们似乎都没有被击中
val route: Route = {
host("fakebook.com", "www.fakebook.com") {
pathSingleSlash {
complete("pong")
} ~
pathPrefix("users") { req =>
path("newuser") {
put {
detach() {
complete(genericPut(CreateUser(req.request)))
}
}
} ~
... rest of routing
这里是我的scalatests的样子,简单的Put传递,但是使用newuser的Put却不是
val createUserSuccessRequest = Put(Uri("http://www.fakebook.com/users/newuser") withQuery(F_User.lastNameString -> "Doe", F_User.firstNameString -> "John", F_User.bioString -> "i like foobar",
F_User.ageString -> "42", F_User.dobString -> dateFormatter.format(new Date(1970 - 1900, 5, 7))))
"The FakeBook route" when {
"When sending a single slash request" should {
"respond with a simple pong" in {
Get() ~> logRequestResponse("plain get final request and response")(sealRoute(route)) ~> check {
assert(responseAs[String] == "pong")
}
}
}
"Running route to create a user with PUT" should {
"forward a message to the backbone to create a new user" in {
createUserSuccessRequest ~> logRequest("create user final request and response"){sealRoute(route)} ~> check {
expectMsg(CreateUser(createUserSuccessRequest))
}
}
}
}
对于试图解决此问题的任何其他人: 很多指令实际上不提取任何内容,因此使用我使用的lambda输入,如req=>和req2=>将不起作用 事实证明,喷洒路由的设计使您永远不必像我使用函数那样接触RequestContext(这就是我尝试访问它的原因)。他们只提取有用的数据。与其做我应该做的事情,改变我的函数签名,我将(现在)做一个已经成功的修补程序 如果您绝对必须拥有requestcontext,只要您没有以某种方式破坏它,您可以通过如下方式生成自己的提取指令来提取它
val extractRequestContext=extract(x=>x)
并将您的代码包装在其中
是我干的
path("somepath") {
detach() {
extractRequestContext { request => complete(someFunc(request)) }
}
}
在将来,我应该学会更正确地使用DSL,使用指令从请求上下文中提取我需要的内容,并将其传递给函数