Выбрасывание свойства, отличного от bean, свойство Bean не читается или имеет недопустимый метод получения - PullRequest
0 голосов
/ 06 августа 2020

Так что моя проблема немного отличается от других. Вызываемая им ошибка - это не имя поля, а вход в форму. Я никогда раньше не сталкивался с этой ошибкой

Error. Содержимое '' - это то, что я ввожу для пароля

org.springframework.beans.NotReadablePropertyException: недопустимое свойство 'Yijian@123' класса bean [com.Alex.UserPackage.User]: свойство Bean 'Yijian@123' не читается или имеет недопустимый метод получения: соответствует ли возвращаемый тип получателя типу параметра установщика? в org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyValue (AbstractNestablePropertyAccessor. java: 622) ~ [spring-beans-5.2.7.RELEASE.jar: 5.2.7.RELEASE] в org.springframework.beansorty (AbstractNestablePropertyAccessor. AbstractNestablePropertyAccessor. java: 612) ~ [spring-beans-5.2.7.RELEASE.jar: 5.2.7.RELEASE] в org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue (AbstractPropertyBindingResult) ~ 1021 *: 104 [spring -context-5.2.7.RELEASE.jar: 5.2.7.RELEASE]

Класс сущности

@Entity
@ValidPassword
public class User {
    @Pattern(regexp="[a-zA-Z]+", message = "Enter letters only!")
    private String firstName;
    @Pattern(regexp="[a-zA-Z]+", message = "Enter letters only!")
    private String lastName;
    private String password;
    private String matchingPassword;
    private String passportNumber;


    

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getMatchingPassword() {
        return matchingPassword;
    }

    public void setMatchingPassword(String matchingPassword) {
        this.matchingPassword = matchingPassword;
    }


}

@ Пользовательская аннотация ValidPassword. Ошибка начала возникать после того, как я использовал геттеры для пароля и сопоставления пароля

private String message;

@Override
public boolean isValid(User user, ConstraintValidatorContext context) {
    String password = user.getPassword();
    String matchingPassword = user.getMatchingPassword();
    if (password== null || matchingPassword == null) {
    return false;
    }
    
    System.out.println("PASSWORDS: " + password + matchingPassword);
    
    boolean flag = Pattern.matches("^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$", password);
    boolean flag1 = password.equals(matchingPassword);
    
    if ( !flag1 ) {
        message = "Passwords do not match!";
    }
    
    
     context.disableDefaultConstraintViolation();
        context.buildConstraintViolationWithTemplate(message)
                .addPropertyNode(password).addConstraintViolation();
        
    return flag && flag1;
    
}

//Show default message if no special message is set
@Override
public void initialize(ValidPassword validPassword) {
    
     message = validPassword.message();
}

Часть пароля формы

<div class = "row">
            <div class="col-sm-6 form-group">
                <label>Password : </label> <Input type="password"
                    th:field="*{password}" th:required="required" class="form-control" />
                    <p th:if="${#fields.hasErrors('password')}"
                    th:errors="*{password}" class="alert alert-danger"></p>
            </div>

1 Ответ

0 голосов
/ 06 августа 2020

Вы передаете значение свойства вместо имени свойства в addPropertyNode(password).

Замените следующее:

context.buildConstraintViolationWithTemplate(message)
                .addPropertyNode(password).addConstraintViolation();

на:

context.buildConstraintViolationWithTemplate(message)
                .addPropertyNode("password").addConstraintViolation();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...