Спрей: маршрутизация-поймите разницу между path и pathPrefix
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)
}
}
}
}
}
}
на маршрут прослушивается:
Error: (49, 1) незаконный запуск простого выражения pathPrefix("testjson") { ^
в чем разница между path
и pathPrefix
?
Я не уверен, если ~
оператор неправильно включен.
1 ответов
path
является окончательным путем, в то время как pathPrefix
может быть впоследствии объединен с другими сегментами пути с помощью DSL.
если вы хотите, чтобы соответствовать именно /hello
вы должны использовать path("hello")
.
pathPrefix
удобно в таких случаях, как
pathPrefix("hello") {
path("foo") {
complete("foo")
} ~
path("bar") {
complete("bar")
}
}
что будет соответствовать /hello/foo
и /hello/bar
.
это, как говорится, Я подозреваю, что ошибка, которую вы получаете, - это просто парсер scala, не ладящий с DSL.
Can попробуйте переместить ~
на той же линии, что и закрывающая скобка?
Я думаю, что парсер выводит точку с запятой, поэтому он действительно понимает этот кусок кода как
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)
}
}
}
}