После обновления с Spring Boot 2.0 до 2.1 все исключения, выданные в WebMvcConfigurer#addFormatters( FormatterRegistry registry )
, больше не перехватываются в @RestControllerAdvice
. Я использую этот метод для дополнительных преобразователей.
Например: *. * 1005
public class ConvertersContainer {
public static class StringToStatusConverter implements Converter<String, Status> {
@Override
public Status convert( String source ) {
return Status.findStatus( source );
}
}
}
И Status
- это перечисление.
public enum Status {
HAPPY("happy"), ANGRY("angry");
private String title;
public static Status findStatus( final String title) {
return stream( values() )
.filter( status-> status.getTitle().equals( title) )
.findFirst()
.orElseThrow( () -> new StatusNotFoundException( "...." ) );
}
}
А StatusNotFoundException extends RuntimeException {}
Я зарегистрировал этот конвертер так:
@Configuration
public class ConverterRegister implements WebMvcConfigurer {
@Override
public void addFormatters( FormatterRegistry registry ) {
registry.addConverter( new ConvertersContainer.StringToStatusConverter() );
WebMvcConfigurer.super.addFormatters( registry );
}
}
И контроллер Advice:
@RestControllerAdvice
public class Advice {
@ExceptionHandler( StatusNotFoundException .class)
protected String handleStatusNotFoundException(StatusNotFoundException ex) { ... }
}
Когда я ставлю точку останова, метод Status#findStatus(...)
хорошо выполняется, но исключение никогда не перехватывается в @RestControllerAdvice
. Что я делаю неправильно?
Большое спасибо