Кто-нибудь, пожалуйста, объясните мне ошибку, которую я получаю. Я делаю подтверждение пароля с помощью учебника .
2020-05-29 15:23:33.397 ERROR 10832 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] :
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction] with root cause
javax.validation.ConstraintViolationException: Validation failed for classes [com.example.onlineshop.model.User] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='Passwords don't match', propertyPath=, rootBeanClass=class com.example.onlineshop.model.User, messageTemplate='Passwords don't match'}
Если не ошибаюсь, я все сделал правильно.
Вот мой Контроллер регистрации.
@RequestMapping(value = "/registration", method = RequestMethod.GET)
public String showRegistration(WebRequest request, Model model) {
User user = new User();
model.addAttribute("user", user);
return "registration";
}
@RequestMapping(value = "/registration", method = RequestMethod.POST)
public ModelAndView createNewUser(@Valid User user, BindingResult bindingResult, HttpServletRequest request, Errors errors) {
ModelAndView model = new ModelAndView();
User userExists = userService.findUserByName(user.getName());
if (userExists != null) {
bindingResult
.rejectValue("name", "errors.user",
"There is already a user registered with the name provided");
}
if (bindingResult.hasErrors()) {
model.setViewName("registration");
} else {
userService.saveUser(user);
model.addObject("successMessage", "User has been registered successfully");
model.addObject("user", new User());
model.setViewName("registration");
}
return model;
}
Это сервис
public User saveUser(User user) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
user.setActive(true);
Role userRole = roleRepository.findByRole("CUSTOMER");
user.setRoles(new HashSet<>(Arrays.asList(userRole)));
return userRepository.save(user);
}
Это моя модель. Простите за вид. Жалоба на слишком много кода
- @ Data
- @ Builder
- @ AllArgsConstructor
- @ NoArgsConstructor
- @ Entity
- @ Table (name = "user")
publi c класс User {
@ Id
- @ GeneratedValue (strategy = GenerationType.AUTO)
- @ Column (name = "user_id")
- private int id;
- @ Column (name = "name" )
- @ NotEmpty (message = "* Пожалуйста, введите свое имя")
- private String name;
- @ Column (name = "email")
- @ ValidEmail
- @ NotEmpty (message = "* Пожалуйста, введите свой адрес электронной почты")
- private String email;
- @ Column (name = "password")
- @ NotEmpty (message = "* Пожалуйста, введите свой пароль")
- @ Length (min = 5, message = "* Длина вашего пароля должна быть не менее 5 символов")
- private String password;
- @ Transient
- private String matchingPassword;
- @ Colum n (name = "active")
- private Boolean active;
- @ ManyToMany (cascade = CascadeType.MERGE)
- @ JoinTable (name = "user_role", joinColumns = @JoinColumn (name = "user_id"),
- inverseJoinColumns = @JoinColumn (name = "role_id"))
- private Установить роли;
- }