Нельзя использовать зависимости Spring Web и Spring Webflux одновременно. Если вы это сделаете, Spring установит приоритеты Spring Web, и фильтры Webflux не будут загружаться при запуске.
Во время запуска Spring пытается создать правильный ApplicationContext для вас. Как написано здесь Веб-среда загрузки Spring , если Spring MVC (web) находится в пути к классам, он установит приоритет этого контекста.
Приложение с весенней загрузкой - это либо традиционное веб-приложение, либо ИЛИ приложение webflux. Это не может быть и то и другое.
ContextPath - это не то, что используется в реактивном программировании, поэтому вы должны фильтровать каждый запрос и переписывать путь для каждого запроса.
Это должно сработать, это компонентный веб-фильтр, который перехватывает каждый запрос и затем добавляет контекстный путь, который вы определили в application.properties
@Component
public class ContextFilter implements WebFilter {
private ServerProperties serverProperties;
@Autowired
public ContextFilter(ServerProperties serverProperties) {
this.serverProperties = serverProperties;
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
final String contextPath = serverProperties.getServlet().getContextPath();
final ServerHttpRequest request = exchange.getRequest();
if (!request.getURI().getPath().startsWith(contextPath)) {
return chain.filter(
exchange.mutate()
.request(request.mutate()
.contextPath(contextPath)
.build())
.build());
}
return chain.filter(exchange);
}
}
Но это будет работать, только если ваше приложение загружено как реактивное приложение Spring.