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