@RequestBody @Valid: тип содержимого не поддерживается

#html #spring #spring-boot #thymeleaf

#HTML #весна #весенняя загрузка #thymeleaf

Вопрос:

Я получил исключение при использовании этих двух аннотаций в моем любимом приложении для весенней загрузки:

Тип содержимого ‘application/x-www-form-urlencoded;кодировка = UTF-8’ не поддерживается

Контроллер:

 @PostMapping("/home/filter/edit")
public String processUpdateFilterForm(@ModelAttribute @Valid UserMatchSearchingFilterDTO userMatchSearchingFilterDTO,
                                      BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        throw new ValidationException(bindingResult.toString());
    }
    userService.update(userMatchSearchingFilterDTO);
    return REDIRECT_TO_HOME;
}
  

Код страницы:

 <html>
<body>
<form method="post">
    <h2>Edit filter</h2>
    <div class="form-group has-feedback">
        <div class="form-group">
            <label class="col-sm-2 control-label">Minimum Age</label>
            <div class="col-sm-10">
                <input class="form-control" type="number" id="ageMin" name="ageMin" value="27"/>
            </div>
        </div>
    </div>
    <div class="form-group">
        <br>
        <div>
            <button class="btn btn-default" type="submit">Update filter</button>
        </div>
    </div>
</form>
</body>
</html>
  

Могу ли я использовать весеннюю проверку без написания собственных валидаторов? Как мне нужно изменить свою страницу или контроллер? Большое спасибо.

Комментарии:

1. Используйте @ModelAttribute вместо @RequestBody . Вы отправляете параметры запроса из формы, а не отправляете тело запроса в форме JSON или XML. Последнее требует @RequestBody первых потребностей @ModelAttribute . В форме используется привязка к данным, в теле используется сериализация.

2. @M.Deinum Я изменил свой контроллер (посмотрите на сообщение, пожалуйста), но в нем по-прежнему нет ошибок… Я использую ‘javax.validation.constraints.@Max «. UPD. Он обновляет мои данные, но проверка не работает

3. Хорошо, что у вас есть аннотация, но без фактической реализации в пути к классу она ничего не делает. Убедитесь, что spring-boot-starter-validation это указано в вашем пути к классу (и то, что вы задаете сейчас, на самом деле совсем другой вопрос!).

4. @M.Deinum спасибо!!! Вы правы, я добавил только api проверки без реализации.