Gateway整合knife4报错404 (Not Found)
在 Spring Cloud Gateway 中整合 Knife4j 后,访问 http://localhost:8000/doc.html 报错,提示 /v3/api-docs/swagger-config 404。
这是 Spring Cloud Gateway + Knife4j 的典型配置问题。根本原因在于:
Gateway 本身没有接口文档(Swagger/OpenAPI),它只是一个路由网关。真正的文档在各个微服务中,Gateway 需要将
/doc.html、/v3/api-docs/**等请求 正确转发到下游服务,或者 聚合多个服务的文档。
而你只加了 knife4j-gateway-spring-boot-starter,但 没有配置文档聚合或路由规则,导致前端请求 /v3/api-docs/swagger-config 时,Gateway 找不到对应处理路径,返回 404。
在 Gateway 中配置聚合
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-gateway-spring-boot-starter</artifactId><version>4.5.0</version>
</dependency>
在 application.yml 中配置聚合规则:
knife4j:gateway:enabled: truestrategy: discover # 自动发现(基于服务注册中心)# 或者手动配置 routes(见下方)routes:- name: 用户服务url: /user-service/v3/api-docsservice-name: user-service # 注册中心中的服务名- name: 内容服务url: /content-service/v3/api-docsservice-name: content-service
注意:
url路径必须与你在 Gateway 中配置的路由前缀一致!
确保 Gateway 有对应的路由规则
(转发 /user-service/** 到 user-service):
spring:cloud:gateway:routes:- id: user-serviceuri: lb://user-servicepredicates:- Path=/user-service/**
这样,当你访问 http://localhost:8000/doc.html 时:
- Knife4j 前端会请求
/v3/api-docs/swagger-config→ 由knife4j-gateway-starter拦截并返回聚合配置 - 然后按服务加载各自的
/v3/api-docs
