Я запускаю новое веб-приложение, используя Spring Boot 2.0. Я хотел бы использовать Vaadin 8 для предоставления пользовательского интерфейса. Кроме того, я хотел бы предоставить интерфейс API с использованием среды WebFlux, предоставляемой Spring 5.
Однако кажется, что включение Vaadin в мой build.gradle приводит к игнорированию моих маршрутов WebFlux:
compile('com.vaadin:vaadin-spring-boot-starter')
Когда я настроил Vaadin, я вижу, что он предположительно настраивается при запуске:
2017-09-16 16:04:52.332 INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration : Registering Vaadin servlet
2017-09-16 16:04:52.333 INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration : Servlet will be mapped to URLs [/vaadinServlet/*, /VAADIN/*]
2017-09-16 16:04:52.356 INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration : Setting servlet init parameters
2017-09-16 16:04:52.356 INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration : Set servlet init parameter [productionMode] = [false]
2017-09-16 16:04:52.357 INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration : Set servlet init parameter [resourceCacheTime] = [3600]
2017-09-16 16:04:52.357 INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration : Set servlet init parameter [heartbeatInterval] = [300]
2017-09-16 16:04:52.357 INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration : Set servlet init parameter [closeIdleSessions] = [false]
2017-09-16 16:04:52.441 INFO 19413 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2017-09-16 16:04:52.444 INFO 19413 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'springVaadinServlet' to [/vaadinServlet/*, /VAADIN/*]
Когда я удаляю Vaadin, я вижу, что мои маршруты WebFlux настраиваются:
2017-09-16 16:07:51.434 INFO 19441 --- [ restartedMain] o.s.w.r.f.s.s.RouterFunctionMapping : Mapped (Accept: [application/json] && /api) -> /document -> org.springframework.web.reactive.function.server.RouterFunction$$Lambda$203/43414926@76ae76e8
Я не вижу этого с активным Vaadin. Кажется, что стартовый пакет Vaadin Spring Boot переопределяет все.
Я попытался изменить путь к своим компонентам @SpringUI, чтобы они не находились в корне, но это ничего не изменило.
Я также пробовал это:
@WebServlet(value = "/myspringuis/*", asyncSupported = true)
public class MySpringServlet extends SpringVaadinServlet {
}
Я не понимаю, как SpringVaadinServlet точно вписывается в это, но подозреваю, что это связано с моей проблемой.
Возможно ли одновременное использование Vaadin и WebFlux? Очевидно, я хотел бы разделить маршруты, чтобы WebFlux обрабатывал /api/*, а Vaadin обрабатывал все остальное.