У меня есть ExceptionHandler в модуле maven A:
@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()) */;
}
}
И DTO с валидатором в модуле maven B:
@FilterPackDateMatches
public class FilterPackInfosDto {
...
}
Я пытаюсь применить валидатор в модуле maven A:
@PostMapping("/packs")
public ResponseEntity<?> getAllPacks(@RequestBody @Valid Filters filters) {
...
}
Но исключение MethodArgumentNotValidException всегда обрабатывается "DefaultHandlerExceptionResolver".
Я пытался расширить ResponseEntityExceptionHandler или даже DefaultHandlerExceptionResolver для @ override метода, но все равно ошибка никогда не обрабатывается моим пользовательским обработчиком.Я не знаю, может ли причина в том, что валидатор и DTO не находятся в одном модуле, чем мой errorHandler.
Кстати, мой ErrorHandler обрабатывает другие ошибки (например, пользовательские исключения), и это работает нормально, так что естьнет проблем с componentScan или около того.Есть идеи?