2つのスプリングフォームフィールドが等しいかどうかを確認するカスタム検証アノテーションが作成されています。カスタム検証アノテーションが失敗します
PasswordVerification:
@Constraint(validatedBy = PasswordVerificationValidator.class)
@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PasswordVerification {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
PasswordVerificationValidator:
public class PasswordVerificationValidator implements ConstraintValidator<PasswordVerification, UserFormRegistration> {
@Override
public void initialize(PasswordVerification constraintAnnotation) {}
@Override
public boolean isValid(UserFormRegistration userFormRegistration, ConstraintValidatorContext context) {
return userFormRegistration.getPassword().equals(userFormRegistration.getVerifyPassword());
}
}
がUserFormRegistration:注釈はクラスUserFormRegistrationに適用されている場合
@PasswordVerification(message = "Password and password confirmation fields don't match")
public class UserFormRegistration {
private String password;
...
そう、それが正常に動作します。しかし、それをフィールドに適用したい場合(下記参照)、失敗します。
public class UserFormRegistration {
@PasswordVerification(message = "Password and password confirmation fields don't match")
private String password;
...
例外:
javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'ua.com.vertex.validators.interfaces.PasswordVerification' validating type 'java.lang.String'. Check configuration for 'password'
修正する方法は?
私はここで答えを見つけることができると思う:https://stackoverflow.com/questions/2469473/variable-field-in-a-constraint-annotation –
ありがとう、それは有用だった – sva605