0

いくつかの検証を実行する必要があるオブジェクトのリストがあります

    @KeyValid
    @Valid
    protected List<KeyValue> keyValues;

そして、私はそれのために作成された次の注釈を持っています:

@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = KeyValidator.class)
public @interface KeyValid{

    String message() default "invalid_parameter_default_message";

    String[] checks() default {};

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

そして、これは私のバリデータです:

public class KeyValidator implements ConstraintValidator<KeyValid, KeyValue> {

    @Override
    public void initialize(KeyValid keyValid) {

    }

    @Override
    public boolean isValid(KeyValue keyValue, ConstraintValidatorContext constraintValidatorContext) {    

        return true;
    }
}

リスト、マップ、またはセットにカスタム制約によって注釈が付けられている場合、コレクションを一括で検証できることをどこかで読んだことがあり、コレクションのすべての要素がバリデーターを呼び出しますが、上記のコードは次のエラーをスローします

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'com.util.Validators.KeyValid' validating type 'java.util.List<com.model.KeyValue>'. Check configuration for 'keyValue'
4

1 に答える 1

0

あなたの制約は、その要素ではなく渡された実際のリストを取得します。Java 8 と最新バージョンの Hibernate Validator を使用している場合は、型引数の制約を使用できます。制約にも必ず追加する必要がありElementType.TYPE_USEます。@Target型引数の制約はまだ Bean Validation の正式な部分ではありませんが、次のバージョン (BV 2.0) に含まれる予定です。

次のようなものがあります。

protected List<@KeyValid KeyValue> keyValues;

または、 @KeyValid 制約をクラス レベルの制約として設定できませんKeyValueか?

于 2016-07-06T07:56:42.030 に答える