java - Play 2.3 Java - 在所有响应上设置 header

标签 java playframework playframework-2.3

我将 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/

相关文章:

scala - Play编译时如何包含生成的源文件?

java - 具有 O(m (log n + log m)) 时间复杂度的算法,用于在每行排序的 n*m 矩阵中查找第 k 个最小元素?

java - 如何使用 wamp 服务器将 BIRT 报告与 php 集成?

java - 是否有一种最好的方法来克隆模型以仅更改一个条目?

java - 如何正确退出独立的 Java Play Framework 脚本?

scala - 为什么 IntelliJ 找不到 SBT 快照依赖项?

java - 将 JSP 文件包含在另一个 JSP 文件中时出现 iFrame 浏览器问题

java - map 获取值查询

基于请求参数的 Scala Play 运行时注入(inject)

tomcat - 如何在 ubuntu 上部署 play 框架应用程序?