請求/響應我有一個電梯項目中
還有一類擴展RestHelper,看起來像這樣如何登錄電梯
serve{
"api"/"mystuff" prefix {
case a => ...
case b => ...
}
}
我如何才能登錄所有的請求(包括POST參數)和沒有把它添加到每個病例陳述?
請求/響應我有一個電梯項目中
還有一類擴展RestHelper,看起來像這樣如何登錄電梯
serve{
"api"/"mystuff" prefix {
case a => ...
case b => ...
}
}
我如何才能登錄所有的請求(包括POST參數)和沒有把它添加到每個病例陳述?
要登錄請求,您可以使用LiftRules.statelessRewrite(在bootstrap.liftweb.Boot):
LiftRules.statelessRewrite.append {
case RewriteRequest(ParsePath("api" :: key :: Nil, "", true, _), _, _) =>
log.info("REST: %s" format key)
RewriteResponse("api" :: key :: Nil,true)
}
將在以下其餘服務器之前被截獲:
case "api":: key :: Nil Get _ => {
val email = S.param("email") getOrElse {
"missing email parameter"
}
Full(PlainTextResponse("succeeded: %s, %s" format (key,email)))
}
注意網址參數保持不變。
要登錄響應您使用LiftRules.afterSend
UPDATE:
使用afterSend實際上你可以訪問請求和響應。
服務和前綴方法各自採用PartialFunction [Req,Box [LiftResponse]]。您不直接使用這些類型,因爲RestHelper爲您提供了許多方便的方法和隱式轉換,但您仍然可以直接訪問Req。如果你只在登錄到「API」 /「的MyStuff」爲前綴URLS的訪問興趣,這是骯髒的,但我認爲你可以做這樣的事情:
object Log {
def unapply(req: Req): Option[Boolean] = {
... code to log the request ....
None
}
}
serve{
"api"/"mystuff" prefix {
case Log(true) => //matching code will always be called but never match
case a => ...
case b => ...
}
}
您贏得hack.me.lift獎 – user1207632
按在電梯食譜Debugging a Request,您可以使用LiftRules.onBeginServicing
和LiftRules.onEndServicing
:
LiftRules.onBeginServicing.append {
case r => println("Received: "+r)
}
LiftRules.onEndServicing.append {
case (req, Full(resp)) => println("Responded: " + resp)
}
我發現了,如果我使用LiftRules.afterSend的建議,我居然有機會獲得請求和響應,並從那裏 – user1207632
很大登錄他們倆。我將更新與該信息的答案 –