В моем приложении Spring Boot у меня есть форма «изменить пользователя», форма привязана к bean-компоненту SecurityUser, но имеет дополнительное (не бобовое) поле для подтверждения пароля. Отображение GET в моем контроллере выглядит следующим образом:
@GetMapping("/security/user/{username}")
public String showEditUserForm(@PathVariable("username") String username, Model model) {
model.addAttribute("securityUser",securityUserService.findByUsername(username));
return "/security/edituser";
}
В отображении POST я хочу проверить значение ввода подтверждения пароля и сравнить его со значением поля пароля, поэтому я кодировал его следующим образом:
@PostMapping("/security/user/{username}")
public String processEditUser(@Valid SecurityUser securityUser, @RequestParam String confirmPassword, BindingResult bindingResult, RedirectAttributes redirectAttributes) {
if (bindingResult.hasErrors()) {
return "security/edituser";
}
logger.debug(securityUser.toString());
logger.debug(confirmPassword);
redirectAttributes.addFlashAttribute("flashstatus","success");
redirectAttributes.addFlashAttribute("flashmessage","You successfully submitted an edituser form");
return "redirect:/security/success";
}
Если форма верна, все работает нормально (предоставлено, это просто регистрация и перенаправление на страницу успеха). Но если какое-либо поле формы имеет значение неверно , результатом будет ошибка 405. (метод HTTP не поддерживается).
В журналах это:
2020-02-06 15:44:39.114 WARN 20496 --- [nio-8080-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]
Первоначально GET и конечные точки POST были разными, поэтому я сделал их такими же, как вы можете видеть, и это, очевидно, не было решением. Если я исключу переменную @BindingResult из сопоставления POST, ошибка исчезнет, но тогда я, очевидно, не смогу проверить подтверждение пароля.
Как получить доступ к входу формы , который не является полем компонента в сопоставлении POST Spring Boot без этой ошибки?