【发布时间】:2019-06-02 11:35:00
【问题描述】:
从 Spring Boot 2.0 更新到 2.1 后,WebMvcConfigurer#addFormatters( FormatterRegistry registry ) 中抛出的所有异常都不再在 @RestControllerAdvice 中捕获。我将此方法用于附加转换器。
例如:
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 );
}
}
和控制器建议:
@RestControllerAdvice
public class Advice {
@ExceptionHandler( StatusNotFoundException .class)
protected String handleStatusNotFoundException(StatusNotFoundException ex) { ... }
}
当我断点时,方法Status#findStatus(...) 执行得很好,但在@RestControllerAdvice 中从未捕获到异常。我究竟做错了什么?
非常感谢
【问题讨论】:
-
您是否尝试捕获该异常并记录它是否被抛出?
-
@JonathanJohx 是的,我能抓住它
-
你的处理方法应该是
public吗?
标签: spring spring-boot spring-mvc exception exception-handling