部署为 WAR 时无法使用 Spring Boot WebFlux 解决视图异常
Unable to resolve view exception with Spring Boot WebFlux when deploying as WAR
在使用 AbstractAnnotationConfigDispatcherHandlerInitializer 将 Spring WebFlux 应用程序作为 war 文件部署到 tomcat.Extended 中时遇到以下异常,并实现了 getConfigClasses 方法,如下所示。
申请
@SpringBootApplication
public class TestSpringApplication extends AbstractAnnotationConfigDispatcherHandlerInitializer {
public static void main(String[] args) {
SpringApplication.run(TestSpringApplication.class, args);
}
@Override
protected Class<?>[] getConfigClasses() {
return new Class[]{
WebConfig.class
};
}
控制器
@Controller
public class TestSpringController {
@RequestMapping("/test")
public Mono<String> hello(Model model){
return Mono.just("account");
}
}
注意:account.html 位于 resources/templates
下
异常
java.lang.IllegalStateException: Could not resolve view with name 'account'.
at org.springframework.web.reactive.result.view.ViewResolutionResultHandler.lambda$resolveViews(ViewResolutionResultHandler.java:276) ~[spring-webflux-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:107) [reactor-core-3.1.1.RELEASE.jar:3.1.1.RELEASE]
Spring Boot 当前不支持部署为 WAR 的 WebFlux 应用程序。
您在这里混合了 Spring 框架推荐的设置(请参阅 the reference documentation,尤其是指向 AbstractServletHttpHandlerAdapterInitializer
的注释)- 以及 WAR 设置Spring 启动 MVC 应用程序。
如果您想 运行 Spring 启动 WebFlux 应用程序,请考虑可执行 JAR 部署模型。
使用@RestController代替TestSpringController的@Controller注解class
在使用 AbstractAnnotationConfigDispatcherHandlerInitializer 将 Spring WebFlux 应用程序作为 war 文件部署到 tomcat.Extended 中时遇到以下异常,并实现了 getConfigClasses 方法,如下所示。
申请
@SpringBootApplication
public class TestSpringApplication extends AbstractAnnotationConfigDispatcherHandlerInitializer {
public static void main(String[] args) {
SpringApplication.run(TestSpringApplication.class, args);
}
@Override
protected Class<?>[] getConfigClasses() {
return new Class[]{
WebConfig.class
};
}
控制器
@Controller
public class TestSpringController {
@RequestMapping("/test")
public Mono<String> hello(Model model){
return Mono.just("account");
}
}
注意:account.html 位于 resources/templates
下异常
java.lang.IllegalStateException: Could not resolve view with name 'account'.
at org.springframework.web.reactive.result.view.ViewResolutionResultHandler.lambda$resolveViews(ViewResolutionResultHandler.java:276) ~[spring-webflux-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:107) [reactor-core-3.1.1.RELEASE.jar:3.1.1.RELEASE]
Spring Boot 当前不支持部署为 WAR 的 WebFlux 应用程序。
您在这里混合了 Spring 框架推荐的设置(请参阅 the reference documentation,尤其是指向 AbstractServletHttpHandlerAdapterInitializer
的注释)- 以及 WAR 设置Spring 启动 MVC 应用程序。
如果您想 运行 Spring 启动 WebFlux 应用程序,请考虑可执行 JAR 部署模型。
使用@RestController代替TestSpringController的@Controller注解class