Spring Cloud Gateway Server MVC路由配置404问题求助
1. 先确认路由路径转换规则是否正确
你的请求路径是/demo1/service1,目标服务接口是/demo1Service1,必须保证路由配置里的路径重写逻辑准确。注意Spring Cloud Gateway Server MVC(Servlet栈)的配置语法和WebFlux版Gateway有差异,举个正确的配置示例(application.yml):
spring: cloud: gateway: mvc: routes: - id: demo1_route uri: http://localhost:8090 predicates: - Path=/demo1/service1 filters: - RewritePath=/demo1/service1, /demo1Service1
重点注意:
uri直接写目标服务的完整地址就行,无Eureka完全可行,静态URI路由是官方支持的方式RewritePath的规则是「原始路径正则」对应「替换后路径」,如果是精确匹配,要确保正则能命中你的请求路径
2. 检查依赖是否正确引入
确保你用的是Gateway MVC的依赖,而不是WebFlux版的Gateway。Maven依赖应该是:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway-mvc</artifactId> </dependency>
如果pom.xml里同时存在spring-boot-starter-webflux,必须移除——Gateway MVC基于Servlet栈,和WebFlux不兼容,会导致路由逻辑异常。
3. 先验证目标服务本身是否正常
直接用浏览器或Postman请求http://localhost:8090/demo1Service1,确认这个接口能正常返回200。另外要注意请求方法匹配:如果目标接口是POST,前端按钮发起的请求也得是POST,否则会因方法不匹配返回404。
4. 开启详细日志看转发细节
在application.yml里加日志配置,看清楚路由匹配后的路径转换过程:
logging: level: org.springframework.cloud.gateway.mvc: DEBUG
通过日志可以确认实际转发到目标服务的路径是不是/demo1Service1,如果路径不对,就说明重写规则配置有误。
5. 排查目标服务的上下文路径
如果目标服务配置了server.servlet.context-path(比如/api),那转发的URI要带上这个上下文路径,比如http://localhost:8090/api/demo1Service1,可以把上下文路径加到uri里,或者调整重写规则。
内容的提问来源于stack exchange,提问作者user3153309

