2013-12-12 2 views
5

Ich benutze Play 2.2.1 und versuche, die onRouteRequest-Funktion in GlobalSettings zu überschreiben. Alle Beispiele, die ich online gefunden habe, sind für Play 2.2.x und sie scheinen nicht in 2.2.x zu funktionieren. Im Grunde möchten Sie einige benutzerdefinierte Sachen im Antwortheader für alle Antworten festlegen.Überschreibe onRouteRequest mit benutzerdefiniertem Handler in Play! scala

Bisher habe ich folgendes versucht, basierend auf 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 
     } 
    } 
    } 

aber das funktioniert nicht wie nichts passt Aktion [_].

Vielen Dank für die Hilfe im Voraus!

Antwort

4

Sie müssen auf eine EssentialAction statt Action übereinstimmen. Hier ist ein Beispiel, das zeigt, wie die „Pragma“ Header auf „no-cache“ für jede Anforderung in 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) 
    } 
    } 
} 

Der Code von der Frage portiert wird, die Sie sich beziehen, die eine vorherige playframework Version gezielt .

Seit playframework 2.1 Sie auch doFilter statt onRouteRequest verwenden können, das gleiche zu erreichen:

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