在 Linux 环境下使用 Swagger(OpenAPI) 常见的“坑”主要集中在这几类:版本差异、路径与权限、代理与网关、生成代码、UI 访问、HTTPS/证书、容器环境。下面按实际踩坑经验总结。
坑:
✅ 建议:
Linux 对路径大小写敏感
@ComponentScan("com.example.controller")
❌ 写成 com.Example.controller 在 Windows 能跑,Linux 直接挂
✅ 建议:
swagger:
json:
path: /opt/app/swagger.json
Linux 常见坑:
✅ 排查:
ls -l /opt/app/swagger.json
ps -ef | grep java
server:
servlet:
context-path: /api
Swagger UI 实际地址变成:
/api/swagger-ui.html
但 Swagger 仍去请求:
/v3/api-docs
❌ 404
✅ 解决(Springdoc):
springdoc:
api-docs:
path: /api/v3/api-docs
常见被拦截:
/swagger-ui/v3/api-docs/webjars✅ Nginx 示例:
location /swagger-ui/ { proxy_pass http://backend; }
location /v3/api-docs/ { proxy_pass http://backend; }
⚠️ 生产环境建议 禁用 Swagger
Swagger 自动生成的 servers:
"servers": [{"url": "http://localhost:8080"}]
但你在:
❌ 前端调不通
✅ 解决:
springdoc:
swagger-ui:
url: /v3/api-docs
或手动指定:
@OpenAPIDefinition(
servers = @Server(url = "https://api.example.com")
)
Linux 默认 UTC,Java 有时区问题
❌ 文档时间乱 ✅ 启动参数:
-Duser.timezone=Asia/Shanghai
chmod +x swagger-codegen-cli.jar
生成代码后:
✅ CI 中注意:
chown -R ci:ci generated/
Linux 下 OpenAPI 生成:
Useruser
当成不同类(Windows 不区分)✅ 规范:
❌ 高危 ✅ 正确做法:
@Profile("!prod")
或:
springdoc:
swagger-ui:
enabled: false
# 看端口
ss -lntp | grep 8080
# 看请求
curl http://localhost:8080/v3/api-docs
# 看日志
journalctl -u your-app
# 看权限
namei -l /opt/app/swagger.json
Linux 下用 Swagger,最坑的不是 Swagger 本身,而是:路径大小写、权限、代理、容器网络和环境差异。
如果你愿意,可以告诉我:
我可以直接帮你定位是哪一类坑。