zme*_*eda 6 routing scala spray
我有4个基于URL的响应级别.所以对于:
*GET on /abc- >响应应该是abc
*GET on /abc/def- >响应应该是def
*GET on /abc/def/ghi- >响应应该是ghi
*GET on /abc/def/ghi/jkl- >响应应该(令人惊讶)jkl
所以我的问题是如何使用Spray.io设计这种请求 - 响应属性?
我知道使用pathPrefixwith path是可能的,但这只是两个级别?使用这种方法,它应该看起来像:
val route = {
path("/abc") {
// complete with response 'abc'
} ~
path("/abc/def") {
// complete with response 'def'
} ~
path("/abc/def/ghi") {
// complete with response 'ghi'
} ~
path("/abc/def/ghi/jkl") {
// complete with response 'jkl'
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法"筑巢路径"?我知道这不起作用,但只是一个想法:
val route = {
path("/abc") {
// complete with response 'abc'
'sub'path("/def") {
// complete with response 'def'
'sub'path("/ghi") {
// complete with response 'ghi'
'sub'path("/jkl") {
// complete with response 'jkl'
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
或任何其他适当的嵌套路径?
最好的,zmeda
jru*_*lph 13
我认为问题是关于如何做到两者,如果路径完成则在一个层面上完成某些事情,或者如果还有更多路径可用则更深入一层.
试试这个:
val route = {
pathPrefix("abc") {
// complete with response 'abc'
pathEnd { complete("abc") } ~ // don't forget the twiggles
pathPrefix("def") {
pathEnd { complete("def") } ~
pathPrefix("ghi") {
pathEnd { complete("ghi") } ~
path("jkl") { // path already includes pathEnd, path(x) = pathPrefix(x ~ PathEnd)
complete("jkl")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句.这与"/ abc /"等不匹配,即带有斜杠的路径.如果你想强制匹配尾部斜杠或者可选择使用pathSingleSlash或pathEndOrSingleSlash代替pathEnd.