我的Spring Boot Web Flux应用已经有一段时间了。此时我想在路由器功能中添加一些异常处理程序:
@Bean
RouterFunction<?> router(final GeneratorHandler generatorHandler) {
return resources("/**", new ClassPathResource("/static/"))
.andOther(route(GET("/generate"), generatorHandler::renderData)
.andRoute(GET("/index"), generatorHandler::renderIndex));
}
所以我添加了另一个这样的bean:
@Bean
HttpHandler httpHandler(final GeneratorHandler generatorHandler) throws Exception {
return WebHttpHandlerBuilder.webHandler(toHttpHandler(router(generatorHandler)))
.prependExceptionHandler((serverWebExchange, exception) -> {
//process here
return null;
})
.build();
}
在此之后,我的视图解析器遇到了麻烦。它无法找到我的任何观点。在调查之后,我意识到调试器不会在ThymeleafReactiveViewResolver类中停止。
这种变化是否可能改变了默认视图解析器?我该如何把它带回来?
答案 0 :(得分:1)
提供httpHandler
禁用Spring Boot的大量支持。
您可以将自己的WebExceptionHandler
声明为组件(即使是有序组件),Spring WebFlux也会为您挑选。如果没有更具体的例子(或者至少是你所看到的堆栈跟踪/错误),很难理解发生了什么。
Spring Boot现在支持WebFlux应用程序中的错误处理(请参阅#8625),以防它执行您尝试实现的目标。