Да, это выполнимо & amp; весна очень хорошо поддерживает его. Вам просто не хватает некоторой конфигурации, чтобы включить ее весной.
blockquote>
- Использовать примечание Spring
@Validated
, чтобы включить весну для проверки контроллера- Ручка
ConstraintViolationException
в вашемControllerAdvice
, чтобы поймать все неудачные сообщения проверки.- Пометить
required=false
в@RequestParam
, чтобы он не выдавал MissingServletRequestParameterException и скорее перешел к следующему шагу проверки ограничений.@ControllerAdvice public class CustomResponseEntityExceptionHandler { @ExceptionHandler public ResponseEntity<ApiError> handle(ConstraintViolationException exception) { //you will get all javax failed validation, can be more than one //so you can return the set of error messages or just the first message String errorMessage = new ArrayList<>(exception.getConstraintViolations()).get(0).getMessage(); ApiError apiError = new ApiError(errorMessage, errorMessage, 1000); return new ResponseEntity<ApiError>(apiError, null, HttpStatus.BAD_REQUEST); } } @RestController @Validated public class MinimumStockController { @RequestMapping(value = "/minimumstock") public Product product( @RequestParam(value = "product.sku", required=false) @NotEmpty(message = "Product.sku cannot be empty") String sku, @RequestParam(value = "stock.branch.id", required=false) String branchID) { return null; } }
ПРИМЕЧАНИЕ.
MissingServletRequestParameterException
не будет иметь доступа к сообщениям проверки javax, поскольку они выдаются до проверки привязки в жизненном цикле запроса.