【问题标题】:Play 2.3 Java - Set header on all responsesPlay 2.3 Java - 在所有响应上设置标头
【发布时间】:2014-07-15 08:56:20
【问题描述】:

我将 Play 2.3.0 与 Java 8 一起使用,并希望在所有请求中设置一些标头。

我已经为 Scala 的类似问题找到了 Stackoverflow-answers,但我没有设法将这个示例转换为 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;
    }
}

【问题讨论】:

    标签: java playframework playframework-2.3


    【解决方案1】:

    最后我使用了ActionComposition,这对我来说效果很好。

    我必须用这样的一行注释每个控制器:

    @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);
        }
    }
    

    【讨论】:

    • tx.response() 现在在 play 2.7 中已弃用
    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 2018-09-12
    • 2012-07-13
    • 2016-01-22
    • 1970-01-01
    • 2012-11-07
    • 2015-12-26
    相关资源
    最近更新 更多