2015-08-06 12 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) 
      } 
      } 
     } 
     } 
    } 
} 

Il route è sempre sotto controllo:Spray: instradamento - capire la differenza tra percorso e Pathprefix

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

Qual è la differenza tra path e pathPrefix? Non sono sicuro che l'operatore ~ non sia incluso correttamente.

risposta

8

path è un percorso finale, mentre pathPrefix può essere successivamente combinato con altri segmenti di percorso utilizzando il DSL.

Se si desidera corrispondere esattamente a /hello, è necessario utilizzare path("hello").

pathPrefix è conveniente in casi come

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

che corrisponderà /hello/foo e /hello/bar.

Detto questo, sospetto che l'errore che si ottiene sia semplicemente il parser di scala che non va d'accordo con la DSL.

Si può provare a spostare il ~ sulla stessa riga della parentesi graffa di chiusura? Credo che il parser è inferendo un punto e virgola, quindi è davvero capire quel pezzo di codice come

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

sembra che io non riesco a combinare Pathprefix con '' ~ – NoIdeaHowToFixThis

+0

@NoIdeaHowtoFixThis vedere il mio ultima modifica –