我将 Play 2.3.0 与 Java 8 一起使用,并希望在所有请求中设置一些 header 。
我已经找到Stackoverflow-answers对于 Scala 的类似问题,但我没有设法将此示例转换为 Java 世界:
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)
}
}
}
我的尝试:
@Override
public Handler onRouteRequest(final Http.RequestHeader request) {
Handler handler = super.onRouteRequest(request);
if(handler instanceof EssentialAction) {
return new EssentialAction() // ?!? - how to do that in Java 8?
} else {
return handler;
}
}
最佳答案
最后我用ActionComposition这对我来说效果很好。
我必须用这样的行注释每个 Controller :
@With(Headers.class)
public class MyController extends Controller {
.... }
...并像这样编写操作(伪代码):
public class Headers extends Action.Simple {
public F.Promise<Result> call(final Http.Context ctx) throws Throwable {
ctx.response().setHeader("Access-Control-Allow-Origin", "*");
return delegate.call(ctx);
}
}
关于java - Play 2.3 Java - 在所有响应上设置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24753876/