В контроллере Spring-Boot во время регистрации пользователя, если есть ошибка привязки, мой контроллер возвращает пользователя на страницу регистрации, но в моей реализации модель, кажется, отсутствует.
Например, я обычно вижу в учебные пособия
@PostMapping
public String registerUserAccount(@ModelAttribute("user") @Valid UserRegistrationDto userDto,
BindingResult result){
User existing = userService.findByEmail(userDto.getEmail());
if (existing != null){
result.rejectValue("email", null, "There is already an account registered with that email");
}
if (result.hasErrors()){
return "registration";
}
userService.save(userDto);
return "redirect:/registration?success";
}
Что, если есть ошибки привязки, возвращает "регистрацию"
Мой контроллер очень похож:
@PostMapping("/user/register")
public String registerNewUser(@ModelAttribute("user") @Valid RegisterUserDTO registerUserDTO,
BindingResult bindingResult,
Model model,
HttpServletRequest request,
Errors errors) {
User existing = userService.findUserByEmail(registerUserDTO.getEmail());
if (existing != null) {
bindingResult.rejectValue("email", null, "There is already an account with that Email");
}
if (bindingResult.hasErrors()) {
return "register";
}
userService.createUser(registerUserDTO);
return "redirect:/registration?success";
}
}
Однако, когда я возвращаю «регистр», в стеке возникает ошибка привязки, что соответствует моему первому тегу тимелиста, связанному с объектом.
Если я меняю контроллер POSTЧтобы добавить модель в явном виде:
if (bindingResult.hasErrors()) {
model.addAttribute(registerUserDTO);
return "register";
}
Затем она работает, возвращая страницу с моделью и ранее введенными данными.
Почему я должен явно добавить модель вreturn?
ОБНОВЛЕНИЕ
Это также не работает:
@PostMapping("/user/register")
public String registerNewUser(@ModelAttribute("user") @Valid RegisterUserDTO registerUserDTO,
BindingResult bindingResult) {
User existing = userService.findUserByEmail(registerUserDTO.getEmail());
if (existing != null) {
bindingResult.rejectValue("email", null, "There is already an account with that Email");
}
if (bindingResult.hasErrors()) {
return "register";