6

Javaアノテーションを使用して引数を検証したいと思います。リスト用に独自のアノテーションを作成する方法がわかりません。

ここに簡単な例があります:

class test{

    @myAnnotation
    List<myObject> myElements =new List<>(); // validated List
}

class myObject{

        String name;
 }

私の注釈インターフェース:

  @Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD}) 
  @Retention(RetentionPolicy.RUNTIME)
  @Constraint(validatedBy=myAnnotation_Validator.class)
  @Documented


public @interface myAnnotation {
          String message() default "List is not valid";
          Class <?>[] groups() default {};
          Class <?extends Payload>[] payload() default{};

          String[] namen();
    }

public class myAnnotation_Validator implements ConstraintValidator<myAnnotation, Collection> {

    @Override
    public void initialize(Kredite_List_Check a) {
        // What to do here???
    }


    @Override
    public boolean isValid(Collection t, ConstraintValidatorContext cvc) {
        // What to do here???
        // How could i get the names from my List "myElements" ?
        return false;
    }

}

この例では、リストの各要素に別の名前がある場合、リストは有効です。ValidatorクラスのlistobjectとmyObject-elementsの名前を取得する方法がわかりません。

アップデート:

私は自分の質問を別の方法で説明しようとしています。

リスト内のタイプ"myObject"の2つの要素( "myElements")が同じ名前の場合、私のリストは無効です。

アノテーションでこれをどのように実現できますか?

4

2 に答える 2

2
public class myAnnotation_Validator implements ConstraintValidator<myAnnotation, Collection> {
     private String[] names;

     @Override
     public void initialize(myAnnotation a) {
        //get values which are defined in the annotation
        names = myAnnotation.namen();
     } 

     @Override
     public boolean isValid(Collection objectToValidate, ConstraintValidatorContext cvc) {

        if(objectToValidate == null) return true; // use the @NotNull annotation for null checks 

        for(Object o : objectToValidate) {
           //check if value is valid
        }

        return false; 
    } 
}

初期化メソッドでは、アノテーションで定義されている値を取得できます。isValid メソッドは、オブジェクトを検証するために使用されます (objectToValidate -> リスト オブジェクト)。

カスタムバリデーターの作成方法の詳細については、http: //docs.jboss.org/hibernate/validator/4.3/reference/en-US/html/validator-customconstraints.html#validator-customconstraints-validator を参照してください。

また、Hibernate-Validator の実装も参考になります。 https://github.com/hibernate/hibernate-validator/tree/master/engine/src/main/java/org/hibernate/validator/internal/constraintvalidators

この回答がお役に立てば幸いです。

于 2012-11-06T13:42:15.293 に答える
0

メソッドのパラメーターとして送信されるコレクションから名前を取得できますisValid。コレクション(あなたの場合はリスト)を繰り返します。

@Override
public boolean isValid(Collection t, ConstraintValidatorContext cvc) {
    // Iterate your Collection t to get the names.
    return false;
}
于 2012-10-31T16:12:29.043 に答える