Я проверяю параметры запроса для конечной точки отдыха как:
@Valid BoundingBox boundingBox
Список параметров запроса сопоставляется с экземпляром BoundingBox. В классе BoundingBox я использовал аннотации для проверки полей, такие как @Max, @Min и т. д.
Чтобы обработать любой недопустимый параметр запроса, я переопределил метод ResponseEntityExceptionHandler.handleMethodArgumentNotValid следующим образом:
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers, HttpStatus status,
WebRequest request) {
List<String> details = new ArrayList<>();
for(ObjectError error : ex.getBindingResult().getAllErrors()) {
details.add(error.getDefaultMessage());
}
ExceptionDetails error = new ExceptionDetails("Validation Failed", details);
return new ResponseEntity(error, HttpStatus.BAD_REQUEST);
}
Аннотация ControllerAdvice размещается в верхней части класса обработчика. @Valid, кажется, работает, поскольку запрос не проходит и возвращает BAD_REQUEST, но метод handleMethodArgumentNotValid не вызывается.