Play Frameworkを使用してサーバーを開発しています。いくつかの私の方法では、これまでのいくつかのアクション(基本的に入力チェック)を行う必要があるので、これを実行する最善の方法はAction Compositionだと思います。Play Frameworkの合成アクションのときと同じアクションを繰り返します。
私は問題なく@Action1 // <---------------------------------------- This action is executed
@Action2(value = "someValue") // <------------------- This action is executed
public CompletionStage<Result> doSomething() {
...
}
をいくつかのアノテーションを使用しますが、すぐに、私は具体的な行動が実行されないことをこれらのいずれかの操作を繰り返ししようとすることができます
:
@Action1 // <---------------------------------------- This action is executed
@Action2(value = "someValue") // <------------------- This action is not executed
@Action2(value = "someOtherValue") // <-------------- This action is not executed
public CompletionStage<Result> doSomething() {
...
}
マイAction1
注釈がどのように見えますPlay Framework exampleのVerboseAnnotation
だから、私はそれをここに書く価値があるとは思わない。私Action2
注釈を繰り返すことができるように私はこのようRepeatableAction2
注釈を宣言した:
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RepeatableAction2 {
Action2[] value() default {};
}
とAction2
は次のようになります。
@With(Action2Impl.class)
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(value = RepeatableAction2.class)
public @interface Action2 {
String value();
}
方法が正しく注釈されています。私が追加した場合:
for (Method m : Application.class.getDeclaredMethods()) {
RequiredJsonValues reqs = m.getAnnotation(RequiredJsonValues.class);
for (RequiredJsonValue req : reqs.value()) {
System.out.println("Method: " + m + " annotation: " + req);
}
}
のメソッドの開始時に私はだから私は間違って何をやっている
Method: public java.util.concurrent.CompletionStage controllers.SomeController.doSomething() annotation: @util.Action2(value=someValue)
Method: public java.util.concurrent.CompletionStage controllers.SomeController.doSomething() annotation: @util.Action2(value=someOtherValue)
を取得しますか?同じアクションを異なる値で何度も連鎖させる方法はありますか?