spring ControllerAdvice无法在约束验证器中正常工作

62lalag4  于 2022-10-31  发布在  Spring
关注(0)|答案(1)|浏览(132)

我对请求正文中的金额属性进行了自定义验证,如果验证失败,则会引发BadRequestException(从我BaseException扩展而来)和ExceptionTranslator类中(用@ControllerAdvice标记)我有两个方法用于捕获异常,一个用于BaseException,另一个用于RuntimeException我问题是当验证失败时,我希望调用handleBaseException,但在isValid期间调用handleRuntimeException时却显示了消息意外异常呼叫。
第一个

ijxebb2r

ijxebb2r1#

在许多情况下,您都可以正确地应用自定义验证:
在处理DTO验证时,必须使用@Validated注解请求中接收的请求正文。
在自定义验证器上,如果违反了某些约束(对某些字段进行验证),则抛出的异常将是MethodArgumentNotValidException,或者在您的案例中抛出异常ConstraintViolationException,这是将抛出的异常,而不是BaseException

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<ErrorResponse> onConstraintValidationException(
        final MethodArgumentNotValidException exception, HttpServletRequest request) {...}

因此,BaseException将在ConstraintViolationException内,由控制器在以下时间点捕获:
@ExceptionHandler(value = {RuntimeException.class})

相关问题