Пользовательская аннотация на уровне загрузки Spring не работает - PullRequest
0 голосов
/ 06 августа 2020

Итак, у меня есть настраиваемая аннотация на уровне типа, которая проверяет соответствие паролей в форме регистрации пользователя. Даже когда валидатор возвращает false, он не выдает ошибку и не отображает сообщение об ошибке. Любая помощь приветствуется!

Entity class. Рассматриваемая аннотация: @ ValidPassword

 @Entity
@ValidPassword(fields = {"password", "matchingPassword"})
public class User {
    private String password;
    private String matchingPassword;

Constraintvalidator class

public class PasswordValidator implements ConstraintValidator<ValidPassword, User> {

    private String[] fields;
    private String message;
    
    @Override
    public boolean isValid(User user, ConstraintValidatorContext context) {
        if (fields[0]== null || fields[1] == null) {
        return false;
        }
        for ( String temp : fields) {
        System.out.println(temp);
        }
        boolean flag = Pattern.matches("^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$", fields[0]);
        boolean flag1 = fields[0].equals(fields[1]);
        
        if ( !flag1 ) {
            message = "Passwords do not match!";
        }
        
        
         context.disableDefaultConstraintViolation();
            context.buildConstraintViolationWithTemplate(message)
                    .addPropertyNode(fields[0]).addConstraintViolation();
            
        return flag && flag1;
        
    }
    
    //Show default message if no special message is set
    @Override
    public void initialize(ValidPassword validPassword) {
        
         fields = validPassword.fields();
         message = validPassword.message();
    }

}

validpassword

@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PasswordValidator.class)
@Documented
public @interface ValidPassword {

    String message() default "Please enter at least 8 characters, 1 uppercase letter, 1 lowercase letter, and 1 special character";
    
    String[] fields();
    
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
...