Подтверждение пароля с весенней аннотацией - PullRequest
0 голосов
/ 29 мая 2020

Кто-нибудь, пожалуйста, объясните мне ошибку, которую я получаю. Я делаю подтверждение пароля с помощью учебника .

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 Установить роли;
  • }
...