我正在使用Spray Routing尝试使用不同的HTTP方法匹配路由,但是当我执行GET请求时,它实际上通过DELETE,PUT和GET。我以为delete
和put
拒绝所有非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
我错过了回电话吗?
答案 0 :(得分:4)
不,你的代码(差不多)正确。
问题在于,在spray中,代码存在于方法匹配器中,但不在提取之下(指令之一"提取"某些内容,例如"参数&#34 ;或"段")始终执行。
在您的情况下,您正确匹配路径提取器,但在此之后路由将执行所有get put delete等。
解决方法是添加" dynamic"关键词就在你的获取/放置等之下。缺点是你会失去一些表现。
path(...) {
get {
dynamic {
...
}
}
}
或者,您可以重新调整代码,以便方法匹配器位于顶层,并且路径提取器位于其下
get {
path(...) {
...
}
}