Отображение POST Spring Boot с проверенным компонентом формы * и * RequestParam выдает ошибку 405 при неверной форме - PullRequest
0 голосов
/ 07 февраля 2020

В моем приложении 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 без этой ошибки?

1 Ответ

1 голос
/ 07 февраля 2020

Это один из редких случаев, когда порядок аргументов действительно имеет значение. Параметр BindingResult должен находиться сразу после объекта, который вы хотите проверить.

Из документации :

Вы должны объявить аргумент Errors или BindingResult сразу после аргумента валидированного метода.

...