2013-12-12 62 views
5

我正在使用Play 2.2.1並嘗試覆蓋GlobalSettings中的onRouteRequest函數。我在網上找到的所有例子都是在Play 2.2.x之前使用的,並且它們在2.2.x中似乎不起作用。基本上想要在響應標題中爲所有響應設置一些自定義的東西。使用Play中的自定義處理程序重寫onRouteRequest! scala

到目前爲止,我已經試過以下,基於this:

object Global extends GlobalSettings { 

    override def onRouteRequest(request: RequestHeader): Option[Handler] = { 
    super.onRouteRequest(request).map { handler => 
     handler match { 
     case a: Action[_] => CustomAction(a) 
     case _   => handler 
     } 
    } 
    } 

然而,由於沒有匹配項行動[_]這是行不通的。

非常感謝所有提前的幫助!

回答

4

您需要匹配EssentialAction而不是Action。這裏是一個展示瞭如何設置「編譯」標題爲「無緩存」中playframework每個請求2.2

import play.api._ 
import play.api.mvc._ 
import play.api.Play.current 
import play.api.http.HeaderNames._ 

object Global extends GlobalSettings { 

    def NoCache(action: EssentialAction): EssentialAction = EssentialAction { request => 
    action(request).map(_.withHeaders(PRAGMA -> "no-cache")) 
    } 

    override def onRouteRequest(request: RequestHeader): Option[Handler] = { 
    if (Play.isDev) { 
     super.onRouteRequest(request).map { handler => 
     handler match { 
      case a: EssentialAction => NoCache(a) 
      case other => other 
     } 
     } 
    } else { 
     super.onRouteRequest(request) 
    } 
    } 
} 

的代碼是從針對先前playframework版本你指的這個問題移植爲例。

由於playframework 2.1你也可以使用的,而不是doFilteronRouteRequest達到相同:

override def doFilter(action: EssentialAction) = EssentialAction { request => 
    if (Play.isDev) { 
    action(request).map(_.withHeaders(
     PRAGMA -> "no-cache" 
    )) 
    } else { 
    action(request) 
  } 
}