ExceptionHandler未捕获MethodArgumentNotValidException

时间:2019-06-04 15:28:37

标签: spring spring-boot

我在Maven模块A中有一个ExceptionHandler:

@ControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class ExceptionHandlerAdvice {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<String> handleException(Exception ex) {

        return ResponseEntity
            .status(400)
            .body("test");
    }
}

以及Maven模块B中的验证器:

@Target({ TYPE, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = FilterPackDateValidator.class)
@Documented
public @interface FilterPackDateMatches {

    String message() default "Dates doesn't match";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}



public class FilterPackDateValidator implements ConstraintValidator<FilterPackDateMatches, Object> {

    @Override
    public boolean isValid(final Object obj, final ConstraintValidatorContext context) {
        final FilterPackInfosDto filter = (FilterPackInfosDto) obj;
        return filter.getPickUpDate().before(filter.getReturnDate()) /* && filter.getPickUpDate().after(new Date()) */;
    }
}

以及Maven模块B中带有验证器的DTO:

@FilterPackDateMatches
public class FilterPackInfosDto {
...
}

我尝试在Maven模块A中应用验证器:

@PostMapping("/packs")
public ResponseEntity<?> getAllPacks(@RequestBody @Valid Filters filters) {
        ...
}

但是MethodArgumentNotValidException始终由“ DefaultHandlerExceptionResolver”处理。

我试图将ResponseEntityExceptionHandler甚至DefaultHandlerExceptionResolver扩展为@override方法,但是该错误从未由我的自定义处理程序处理。 我不知道验证器和DTO不在我的errorHandler所在的模块中的事实。

顺便说一句,我的ErrorHandler处理其他错误(例如自定义异常),并且工作正常,因此componentScan左右没有问题。 有想法吗?

0 个答案:

没有答案