You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Cloud Reactive Gateway 静态路由持续返回404错误求助

Spring Cloud Reactive Gateway 静态路由持续返回404错误求助

我之前调试Gateway的时候也碰到过几乎一模一样的404问题,咱们一步步来排查,应该能很快解决:


1. 先确认Gateway的依赖是否正确

你当前用的spring-cloud-starter-gateway-server-webflux并不是官方标准的Starter依赖,这很可能是路由规则无法正确加载的核心原因!

正确的Spring Cloud Gateway Starter应该是spring-cloud-starter-gateway,它已经内置了Reactive WebFlux运行环境,完全能满足你的需求。建议立刻替换依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

错误的依赖会导致Gateway的核心路由组件无法初始化,自然没法正常转发请求。

2. 检查路由配置是否被正确加载

替换依赖后重启Gateway,先看启动日志里有没有类似这样的内容:

RouteDefinition matched: service-play

如果没出现这条日志,说明你的路由配置没被识别,此时要重点检查application.yml的缩进格式(YAML对缩进极其敏感,必须用空格缩进,不能用Tab)。

要是想更清晰地看到请求匹配的全过程,建议开启Gateway的调试日志,在application.yml里加这段配置:

logging:
  level:
    org.springframework.cloud.gateway: DEBUG
    org.springframework.web.reactive: DEBUG

这样当你访问http://localhost:9191/api/play/1时,就能在日志里明确看到:

  • 请求是否真的进入了Gateway
  • 是否匹配到了service-play这条路由
  • 最终转发的目标URL是什么

3. 验证路径转发逻辑

你的业务服务路径是/api/play/{id},Gateway的Path=/api/play/**规则理论上会把完整路径转发到目标服务,逻辑是对的。但如果调试日志显示转发路径有异常,可以尝试加一个路径重写过滤器(虽然这里理论上不需要,但能用来验证问题):

spring:
  cloud:
    gateway:
      routes:
        - id: service-play
          uri: http://localhost:8080
          predicates:
            - Path=/api/play/**
          filters:
            - RewritePath=/api/play/(?<segment>.*), /api/play/$\{segment}

这个过滤器会把匹配到的路径原样转发,用来排除路径转发环节的异常。

4. 最后确认基础环境

再检查两个最基础的点:

  • 业务服务确实在localhost:8080正常运行,直接访问http://localhost:8080/api/play/1能返回预期结果
  • Gateway的端口9191没有被其他程序占用,启动时没有端口冲突的报错

按这个顺序排查,大概率能解决你的404问题。如果还是不行,可以把Gateway的启动日志和请求调试日志贴出来,咱们再进一步分析!

火山引擎 最新活动