我在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左右没有问题。 有想法吗?