2

応答を変更するためのPlayFramework2.0.4Javaの単一の場所を探しています。

ユースケース: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 に答える