import akka.actor.Actor
import spray.routing.HttpService
import spray.http._
import MediaTypes._
import spray.json._
import spray.routing.directives.CachingDirectives._
import spray.httpx.encoding._
trait MarginEvaluationService extends HttpService {
import ClassSerializer._
import spray.httpx.SprayJsonSupport._
val myRoute = {
pathPrefix("hello") {
get {
respondWithMediaType(`text/html`) { // XML is marshalled to `text/xml` by default, so we simply override here
complete {
<html>
<body>
<h1>Say hello to <i>spray-routing</i> on <i>spray-can</i>!</h1>
</body>
</html>
}
}
}
}
~
pathPrefix("testjson") {
get {
entity(as[TestC]) { c =>
respondWithMediaType(`application/json`) {
complete(c)
}
}
}
}
}
}
route被窃听:
错误:(49,1)非法启动简单表达式 pathPrefix(“testjson”){^
path
和pathPrefix
之间有什么区别?
我不确定~
运算符是否未正确包含在内。
答案 0 :(得分:10)
path
是最终路径,而pathPrefix
可以随后使用DSL与其他路径段合并。
如果您想要与/hello
完全匹配,则应使用path("hello")
。
pathPrefix
很方便
pathPrefix("hello") {
path("foo") {
complete("foo")
} ~
path("bar") {
complete("bar")
}
}
将匹配/hello/foo
和/hello/bar
。
话虽如此,我怀疑你得到的错误只是scala解析器与DSL无关。
您可以尝试将~
移动到与右括号相同的行吗?
我认为解析器正在推断一个分号,因此它真正理解这段代码为
pathPrefix("hello") {
get {
respondWithMediaType(`text/html`) { // XML is marshalled to `text/xml` by default, so we simply override here
complete {
<html>
<body>
<h1>Say hello to <i>spray-routing</i> on <i>spray-can</i>!</h1>
</body>
</html>
}
}
}
};
~
pathPrefix("testjson") {
get {
entity(as[TestC]) { c =>
respondWithMediaType(`application/json`) {
complete(c)
}
}
}
}
答案 1 :(得分:0)
pathPrefix(x):这将在不匹配的(x)之前添加一个斜杠。为了易于使用,我们不必在指令中包含斜杠。 (斜线〜x)。
path(x):这将在不匹配的(x)之前添加一个斜杠,将匹配(x),然后添加一个PathEnd。 (x)之后的不匹配路径将被忽略。 (斜线〜x〜PathEnd)
答案 2 :(得分:0)
在docs中:
路径(x):等效于rawPathPrefix(slash()。concat(segment(x))。concat(pathEnd()))。它匹配一个前导斜杠,后跟x,然后是结尾。
pathPrefix(x):等效于rawPathPrefix(slash()。concat(segment(x)))。它与后跟x的前斜杠匹配,然后使后缀不匹配。