2012-09-25 122 views
1

我目前正在使用Lift作爲框架使用Rest Api。 大部分請求使用JSON作爲返回類型的正常工作:Scala Lift Rest API響應HTML

serve ("api"/"item" prefix { 
    case _ :: Nil JsonGet _ => { 
     if (checkKey(S.params("api_key").mkString)) Item.newItem(S.params("item_id").mkString, S.params("api_key").mkString) 
    } 
    }) 

現在我想添加它返回存儲在MySQL數據庫純HTML的功能。所以基本上我想返回一個字符串到Resthelper。 我想是這樣的,但它沒有編譯:

serve { 
    case "itemDesc" :: itemnum :: _ => { 
     Item.getDescription(itemnum) 
    } 
    } 

也許我傻,但我找不到在提東西「菜譜」

更新:

serve { 
    case "itemDesc" :: AsInt(itemnum) :: _ XmlGet _ => { 
     Item.getDescription(itemnum) 
    } 
    } 

我試圖通過將XML賣爲XML來愚弄電梯。它編譯了但最後並沒有工作。 很明顯,無法從RestHelper響應正常的字符串。

感謝您的幫助

回答

1

你必須給回Box[LiftResponse]

所以在這種情況下,它應該是Full(PlainTextResponse(Item.getDescription(itemnum))

我也從LiftResponse -> Box[LiftResponse]

+0

謝謝你的工作。但現在我有問題,由Item.getDecription(itemnum)函數返回的HTML作爲html打印到瀏覽器而不是解釋html。看起來內容被包裝在一個html預標籤中。 –

+0

請看下面的答案。 – Lukasz

0
serve { 
    case "itemDesc" :: AsInt(itemnum) :: _ XmlGet _ => { 
     Full(PlainTextResponse(Item.getDescription(itemnum), ("Content-Type" -> "text/html") :: Nil, 200)) 
    } 
    } 

添加隱式轉換是正確的答案。我不得不將內容類型添加到PlainTextResponse以獲取解析的HTML。有了這個剪輯,我可以讓我的休息api像魅力一樣工作,並添加一個將內容類型爲html的純文本返回給瀏覽器的函數。

+0

嗯,我有點哈克解決方案。看這裏: http://scala-tools.org/mvnsites/liftweb-2.4/#net.liftweb.http.LiftResponse 並擴展「已知子類」。在這種情況下,我會使用: XhtmlResponse。但問題是,Item.getDescription返回String,這繞過了HTML解析器,並且很容易在這裏介紹XSS。在這種情況下,你應該使用Snippets,Css轉換和所有提升善良。休息是更好的獲取json/xml或推送一些數據/狀態到服務器。 – Lukasz