Проверка по полям java - PullRequest
       47

Проверка по полям java

0 голосов
/ 15 февраля 2020

Я пытаюсь сделать валидацию между полями. Это простой пароль и подтверждение пароля. Когда я добавляю пользователя с другим паролем, проверка работает и выдает ошибку «неправильный пароль». Но когда я пытаюсь добавить пользователя с правильным паролем, я получаю сообщение об ошибке:

Проверка не удалась для классов [pl.coderslab.charity.entity.User] в течение времени сохранения для групп [javax.validation.groups .Default,] Список нарушений ограничений: [ConstraintViolationImpl {interpolatedMessage = '{pl.coderslab.passwordValidator.error.message}', propertyPath =, rootBeanClass = class pl.coderslab.charity.entity.User, messageTemplate = '{pl. coderslab.passwordValidator.error.message} '}] javax.validation.ConstraintViolationException: проверка не удалась для классов [pl.coderslab.charity.entity.User] в течение продолжительного времени для групп [javax.validation.groups.Default,] Список ограничений нарушения: [ConstraintViolationImpl {interpolatedMessage = '{pl.coderslab.passwordValidator.error.message}', propertyPath =, rootBeanClass = класс pl.coderslab.charity.entity.User, messageTemplate = '{pl.coderslab.passwordValidatorer. } '}]

Можете ли вы помочь мне решить эту проблему? Я использую пружинную загрузку, jsp, mySql.

Entity:

@Entity
@PasswordConfirmed
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private String email;

    private String password;
    private String confirmedPassword;
    private boolean enabled = false;

    @OneToMany
    private List<Donation> donations = new ArrayList<>();

    @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Set<Role> roles;

Интерфейс валидатора:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {PasswordValidator.class})
public @interface PasswordConfirmed {
    String message() default "{pl.coderslab.passwordValidator.error.message}";

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

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

Validator :

public class PasswordValidator implements ConstraintValidator<PasswordConfirmed, User> {

    @Override
    public void initialize(PasswordConfirmed constraint) {

    }

    @Override
    public boolean isValid(User user, ConstraintValidatorContext context) {
        return user.getPassword().equals(user.getConfirmedPassword());
    }

Контроллер:

  @PostMapping("/createUser")
    public String postCreateUserForm(@Valid User user,BindingResult bindingResult, Model model, HttpServletRequest request) throws MessagingException {

       if(bindingResult.hasErrors()){
           return "user/createUser";
       }
        userService.saveUser(user);
        ConfirmationToken confirmationToken = new ConfirmationToken(user);
        confirmationTokenService.saveToken(confirmationToken);
        String url = request.getRequestURL().toString().replace("createUser", "");
        emailService.sendEmail(user.getEmail(), "Aktywuj konto", url +"confirmAccount?token=" + confirmationToken.getTokenValue());

        return "redirect:/";
    }

Служба пользователя:

 public void saveUser(User user) {
        user.setPassword(passwordEncoder.encode(user.getPassword()));
        user.setConfirmedPassword(passwordEncoder.encode(user.getConfirmedPassword()));
        userRepository.save(user);
    }

JSP:

<form:form method="post" modelAttribute="user">
    <div class="form-group">
        <form:input  path="name" type="name" name="name" placeholder="Imię"/>
    </div>
    <div class="form-group">
        <form:input path="email" type="email" name="email" placeholder="Email"/>
    </div>
    <div class="form-group">
        <form:input path="password" type="password" name="password" placeholder="Hasło"/>
    </div>
    <form:hidden path="roles" value="1"></form:hidden>
    <div class="form-group">
        <form:input path="confirmedPassword" type="password" name="confirmed_password"  placeholder="Powtórz hasło"/>
        <form:errors></form:errors>
    </div>

    <div class="form-group form-group--buttons">
        <a href="login.html" class="btn btn--without-border">Zaloguj się</a>
        <button class="btn" type="submit">Załóż konto</button>
    </div>
</form:form>

1 Ответ

0 голосов
/ 16 февраля 2020

Это весь мой код, может быть, это поможет: https://github.com/JanDuda6/projectCharity

...