在Play 2控制器方法中减少样板

时间:2015-10-26 12:54:37

标签: java playframework-2.0

我有一个Play控制器,它有几个非常相似的方法。我想知道如何减少样板:

public static Result foo() {
  // boilerplate
  if (!PREVIEW) {
    return redirect(routes.Application.login());
  }
  // other code
  ...
  return ok("...");
}

public static Result bar() {
  // boilerplate
  if (!PREVIEW) {
    return redirect(routes.Application.login());
  }
  // other code
  ...
  return ok("...");
}

PREVIEW是配置设置的简写。

1 个答案:

答案 0 :(得分:1)

我创建了一个这样的动作:

public class PreviewAction extends Action.Simple {
    public F.Promise<Result> call(Http.Context ctx) throws Throwable {
        if (!PREVIEW) {
            return F.Promise.pure(redirect(routes.Application.login()));
        }
        return delegate.call(ctx);
    }
}

现在我可以在我的其他动作上使用注释,它的工作方式与以前一样:

@With(PreviewAction.class)
public static Result foo() {
  ...
}

更多信息:https://www.playframework.com/documentation/2.4.x/JavaAsync

感谢Tunaki指出我正确的方向。