@ControllerAdvice
public class ApiValidationExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request
) {
BindingResult bindingResult = ex
.getBindingResult();
List<ApiFieldError> apiFieldErrors = bindingResult
.getFieldErrors()
.stream()
.map(fieldError -> new ApiFieldError(
fieldError.getField(),
fieldError.getCode(),
fieldError.getRejectedValue())
)
.collect(toList());
List<ApiGlobalError> apiGlobalErrors = bindingResult
.getGlobalErrors()
.stream()
.map(globalError -> new ApiGlobalError(
globalError.getCode())
)
.collect(toList());
ApiErrorsView apiErrorsView = new ApiErrorsView(apiFieldErrors, apiGlobalErrors);
return new ResponseEntity<>(apiErrorsView, HttpStatus.UNPROCESSABLE_ENTITY);
}
}