2013-12-12 15 views
5

Sto usando Play 2.2.1 e sto cercando di sovrascrivere la funzione onRouteRequest in GlobalSettings. Tutti gli esempi che ho trovato online sono prima di Play 2.2.x e non sembrano funzionare in 2.2.x. In pratica, si desidera impostare alcuni elementi personalizzati nell'intestazione della risposta per tutte le risposte.Override onRouteRequest con gestore personalizzato in Play! scala

Finora, ho provato quanto segue, sulla base di 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 
     } 
    } 
    } 

Tuttavia questo non funziona come nulla corrisponde azione [_].

Grazie mille per tutto l'aiuto in anticipo!

risposta

4

È necessario abbinare su un EssentialAction anziché su Action. Ecco un esempio che mostra come impostare l'intestazione "pragma" a "no-cache" per ogni richiesta in play framework 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) 
    } 
    } 
} 

Il codice viene trasferito dalla domanda che si sta riferendo a cui mira una versione play framework precedente .

Dal play framework 2.1 è anche possibile utilizzare doFilter invece di onRouteRequest per ottenere lo stesso:

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