2

我正在寻找 play framework 2.0.4 Java 中的一个地方来修改响应。

用例:在 GlobalSettings.onRequest() 方法中加载一些用户对象。那行得通,但我还需要设置一个cookie。我需要访问 response() 或 session()。onRequest() 方法中似乎都没有。并且没有 onResponse() 方法。

我现在看到的唯一方法是在每个控制器的方法中调用一个返回结果的方法。

更新 我最初在这里发布的链接现在已经死了。相反,我发现这个http://www.playframework.com/documentation/2.0/JavaActionsComposition解释了与下面接受的答案相同的事情。此外,关于控制器注释的注释很有用。

4

1 回答 1

4

在 Java 中,这似乎比在 Scala 中困难得多。基本思想是用自定义动作包装每个动作,在调用时添加标题并调用原始方法(delegate)。这与 Java 动作组合中的机制完全相同。

此解决方案适用于我,但未经过广泛测试,因此请检查您的所有操作是否仍然有效。

import play.*;
import play.mvc.*;

public class Global extends GlobalSettings {

  private class ActionWrapper extends Action.Simple {
    public ActionWrapper(Action action) {
      this.delegate = action;
    }

    @Override
    public Result call(Http.Context ctx) throws java.lang.Throwable {
      Result result = this.delegate.call(ctx);
      Http.Response response = ctx.response();
      response.setHeader("X-My-Header", "100");
      return result;
    }
  }

  @Override
  public Action onRequest(Http.Request request, java.lang.reflect.Method actionMethod) {
    return new ActionWrapper(super.onRequest(request, actionMethod));
  }

}
于 2013-03-11T12:36:50.243 回答