LoginSignup
2
2

More than 5 years have passed since last update.

Play2.5 (Java)でcontrollerの処理の後に処理を実行するハンドラの書き方

Posted at

アクションを合成するカスタムアノテーションを作成し、そこに、アクションが完了した後に実行される処理を記述します。

つまり、「アクションが終わった後に処理が実行されるアクション」を作成し、任意のコントローラーのメソッドに合成します。

※正しい(推奨されている)書き方なのかどうか自信はありませんが……

ソース

HogeController.java
package controllers;

import javax.inject.Singleton;

import play.mvc.Controller;
import play.mvc.Result;
import play.mvc.With;

@Singleton
public class HogeController extends Controller {

    @With(HogeAction.class)
    public Result index() {
        System.out.println("--------------------------");
        System.out.println("HogeController.index");
        System.out.println("--------------------------");
        return ok();
    }
}
HogeAction.java
package controllers;

import java.util.concurrent.CompletionStage;

import play.mvc.Action;
import play.mvc.Http.Context;
import play.mvc.Result;

public class HogeAction extends Action.Simple {

    @Override
    public CompletionStage<Result> call(Context ctx) {

        System.out.println("before action");

        return delegate.call(ctx)
                .whenComplete((result, t) -> {

                    System.out.println("status:" + result.status());
                    System.out.println("after action");

                });
    }

}

実行結果

before action
--------------------------
HogeController.index
--------------------------
status:200
after action

参考URL

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2