gpt4 book ai didi

java - 如何在一个地方修改响应

转载 作者:行者123 更新时间:2023-11-30 07:18:30 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com