Я пытаюсь сделать валидацию между полями. Это простой пароль и подтверждение пароля. Когда я добавляю пользователя с другим паролем, проверка работает и выдает ошибку «неправильный пароль». Но когда я пытаюсь добавить пользователя с правильным паролем, я получаю сообщение об ошибке:
Проверка не удалась для классов [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>