我对请求正文中的金额属性进行了自定义验证,如果验证失败,则会引发BadRequestException(从我BaseException扩展而来)和ExceptionTranslator类中(用@ControllerAdvice标记)我有两个方法用于捕获异常,一个用于BaseException,另一个用于RuntimeException我问题是当验证失败时,我希望调用handleBaseException,但在isValid期间调用handleRuntimeException时却显示了消息意外异常呼叫。
第一个
1条答案
按热度按时间ijxebb2r1#
在许多情况下,您都可以正确地应用自定义验证:
在处理DTO验证时,必须使用
@Validated
注解请求中接收的请求正文。在自定义验证器上,如果违反了某些约束(对某些字段进行验证),则抛出的异常将是
MethodArgumentNotValidException
,或者在您的案例中抛出异常ConstraintViolationException
,这是将抛出的异常,而不是BaseException。因此,BaseException将在ConstraintViolationException内,由控制器在以下时间点捕获:
@ExceptionHandler(value = {RuntimeException.class})