2012-02-02 40 views
0

我偶然發現了這個問題,我想知道Lift-way是如何執行這樣的操作的。當然,我可以做我自己的錯誤處理等,但基本上我想知道如何將Box [Elem]變成LiftResponse。理想情況下是XmlResponse當然。將Box [Elem]轉換爲LiftResponse的提升方式是什麼?

這種情況是,我正在使用RestHelper API,我有一個函數返回給我一個Box [Elem]。我想利用異步支持。

我得到的錯誤是Box [Elem](或Box [NodeSeq],Box [Node])無法轉換爲LiftResponse。然而,沒有使用RestContinuation的代碼完全相同。

注意:我不想讓Lift執行任何模板處理邏輯。只需輸出XML即可,而不使用RestContinuation。

val userId = S.param("userId") map { _.toInt } 

RestContinuation.async { 
    reply => { 
    reply(
     for { 
     user <- userRepo.select(userId) ?~ "No such user." ~> 404 
     } yield { 
     <user> 
      <name>{user.name}</name> 
     </user> 
     } 
    ) 
    } 
} 

回答

1

我認爲有一個implicit聲明丟失。你可以通過在範圍內混合traitXMLApiHelper來在周圍的類中混合

+0

我所缺少的是這個「對象創建不可能,因爲createTag類型的特性XMLApiHelper中的方法createTag(in:scala.xml .NodeSeq)scala.xml.Elem沒有被定義「我應該爲createTag使用什麼?爲什麼它在那裏,爲什麼每個響應都包含它? – 2012-02-02 15:13:47

+0

'createTag'用於指定XML api的根標記。你通常會把'NodeSeq'包裝在其他標籤中:'def createTag(in:NodeSeq)= {in}'。 – Debilski 2012-02-02 15:36:19

+0

好吧,那不是我要找的。沒有 {in}圍繞所有的標籤,所以有一個選項可以獲得與RestHelper一樣的行爲w這可以例如處理JSON和Xml? – 2012-02-02 15:54:38

相關問題