喷涂IO,为响应添加标头

时间:2014-07-28 08:05:05

标签: scala spray spray-dsl

我有(以前)REST spray.io webservice。现在,我需要在我的一个方法中生成SESSIONID以与其他一些方法一起使用。我希望它在响应标题中。

基本上,我想象逻辑如下:

 path("/...") {
   get {
     complete {
       // some logic here
       // .....
       someResult match {
         case Some(something) =>
           val sessionID = generateSessionID
           session(sessionID) = attachSomeData(something)
           // here I need help how to do my imaginary respond with header
           [ respond-with-header ? ]("X-My-SessionId", sessionID) {
             someDataMarshalledToJSON(something)
           }


         case None => throw .... // wrapped using error handler
       }
     } 
   }
 }

但是,它并不完整,我指的是respondWithHeader指令。我需要一个建议。

1 个答案:

答案 0 :(得分:5)

Spray中有一个respondWithHeader指令。以下是官方doc以及如何使用它的示例:

 def respondWithSessionId(sessionID: String) =
   respondWithHeader(RawHeader("X-My-SessionId", sessionID))

 path("/...") {
   get {
       // some logic here
       // .....
       sessionIDProvider { sessionID =>
           respondWithMediaType(`application/json`) { // optionally add this if you want
             respondWithSessionId(sessionID) {
               complete(someDataMarshalledToJSON(something))
             }
           }
       }
   }
 }