java - 如何在单个位置修改响应

标签 java playframework-2.0

我正在寻找 Play Framework 2.0.4 Java 中的一个位置来修改响应。

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

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

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

最佳答案

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

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

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

}

关于java - 如何在单个位置修改响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15325611/

相关文章:

java - Build.Gradle Error (22,0) 找不到方法 chandroid()

postgresql - PSQLException : The column index is out of range: 2, 列数:1

sql - 在Anorm中保存新对象时如何检索主键

java - 正则表达式、匹配器和 DateTimeParseException : Text '01/08/2018' could not be parsed at index 0

java - 测试 jdbc 查询和准备好的语句

java - Amazon API Gateway 403 禁止

java - 玩2.0(java): Is MongoDB suitable for hotel booking web app?

playframework-2.0 - 使用 playframework 提交表单

javascript - 在 JavaScript 中访问 Playframework session

java - Gitkit Java - 更新照片 URL