喷涂路由不正确匹配HTTP方法

时间:2015-01-19 00:01:14

标签: akka spray http-method spray-dsl

我正在使用Spray Routing尝试使用不同的HTTP方法匹配路由,但是当我执行GET请求时,它实际上通过DELETE,PUT和GET。我以为deleteput拒绝所有非HTTP DELETE或HTTP PUT的请求。

这是我的基本代码:

path(Segment ~ Slash.?) { id =>
  delete {
    println("Hello from DELETE")
    //do stuff for delete
    complete("done for DELETE")
  } ~
  put {
    println("Hello from PUT")
    //do stuff for put
    complete("done for PUT")
  } ~
  get {
    println("Hello from GET")
    //do stuff for get
    complete("done for GET")
  }
}

如果我触发GET请求,我可以看到应用程序打印:

Hello from DELETE
Hello from PUT
Hello from GET

我错过了回电话吗?

1 个答案:

答案 0 :(得分:4)

不,你的代码(差不多)正确。

问题在于,在spray中,代码存在于方法匹配器中,但不在提取之下(指令之一"提取"某些内容,例如"参数&#34 ;或"段")始终执行。

在您的情况下,您正确匹配路径提取器,但在此之后路由将执行所有get put delete等。

解决方法是添加" dynamic"关键词就在你的获取/放置等之下。缺点是你会失去一些表现。

path(...) {
  get {
    dynamic {
      ...
    }
  }
}

或者,您可以重新调整代码,以便方法匹配器位于顶层,并且路径提取器位于其下

get {
   path(...) {
     ...
   }
}