2015-08-06 24 views
5
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) 
      } 
      } 
     } 
     } 
    } 
} 

Die route abgehört:Spray: Routing - verstehen den Unterschied zwischen Weg und PATHPREFIX

Error:(49, 1) illegal start of simple expression pathPrefix("testjson") { ^

Was ist der Unterschied zwischen path und pathPrefix? Ich bin mir nicht sicher, ob der Operator ~ nicht ordnungsgemäß enthalten ist.

Antwort

8

path ist ein endgültiger Pfad, während pathPrefix kann später mit anderen Pfadsegmente über die DSL kombiniert werden.

Wenn Sie genau /hello übereinstimmen möchten, sollten Sie path("hello") verwenden.

pathPrefix ist bequem in Fällen wie

pathPrefix("hello") { 
    path("foo") { 
    complete("foo") 
    } ~ 
    path("bar") { 
    complete("bar") 
    } 
} 

die /hello/foo und /hello/bar wird übereinstimmen.

Dass ich gesagt habe, ich vermute, der Fehler, den Sie bekommen, ist einfach der Scala-Parser, der nicht mit dem DSL zurechtkommt.

Können Sie versuchen, die ~ in der gleichen Zeile wie die schließende Klammer verschieben? Ich denke, der Parser ein Semikolon ist Folgern, so zu verstehen, es ist wirklich das Stück Code als

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) 
     } 
     } 
    } 
    } 
+0

sieht es aus wie ich nicht PATHPREFIX mit '~' – NoIdeaHowToFixThis

+0

@NoIdeaHowtoFixThis siehe meine zuletzt kombinieren –

Verwandte Themen