BindingResult не работает

Я разработал контроллер Restful в Spring-Boot. у него есть метод сохранения объектов книги (с методом post), который отлично работает, если вы не отправляете недопустимый ввод (например, если вы отправляете нецелое значение в целочисленное поле). Проблема здесь в том, что вместо выполнения Spring объект BindingResult выдает исключение HttpMessageNotReadableException. Поэтому я не могу обрабатывать / обрабатывать ошибки привязки и дальнейшую проверку.

Что мне нужно, так это то, что как я могу сказать Spring не генерирует никаких исключений, пока он связывает запрос с объектом, поэтому я могу использовать bindingResult.hasErrors () и обрабатывать его по-своему.

Примечание: я не хочу обрабатывать объект, созданный Spring.

вот мой код:

@PostMapping
public ResponseEntity<Book> saveBook (
        @RequestBody Book book, BindingResult bindingResult, HttpServletRequest request ) {
    if ( bindingResult.hasErrors() == true )
        throw new RestArgumentValidationException( bindingResult, request.getRequestURI() );
    return new ResponseEntity<>( bookRepository.save( _book ), HttpStatus.CREATED );
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
149
1

Ответы 1

Ну, сначала вы должны поместить аннотацию проверки в свои объекты книги, например:

public class Book {
  @Size(min = 5, max = 10)
  int height;
}

Затем вы должны указать @Valid в своих объектах, которые необходимо проверить, чтобы сообщить Spring.

@PostMapping
public ResponseEntity<Book> saveBook (
        @RequestBody @Valid Book book, BindingResult bindingResult, HttpServletRequest request ) {
    if ( bindingResult.hasErrors() == true )
        throw new RestArgumentValidationException( bindingResult, request.getRequestURI() );
    return new ResponseEntity<>( bookRepository.save( _book ), HttpStatus.CREATED );
}

Я сделал то, что вы упомянули, но это все еще вызывает исключение.

user335870 31.05.2018 11:21

Другие вопросы по теме