SpringDoc + Knife4j的配置参考示例

【投稿赢 iPhone 17】「我的第一个开源项目」故事征集:用代码换C位出道! 10w+人浏览 1.6k人参与

以下是 Spring Boot 3 项目中 application.yml 文件中 springdoc-openapiknife4j 的完整、详细配置示例,每个配置项都带有中文注释说明其作用和推荐值,适用于企业级生产项目。


✅ SpringDoc OpenAPI + Knife4j 完整配置详解(application.yml)

# ==================== SpringDoc OpenAPI 核心配置 ====================
springdoc:
  # 是否启用 OpenAPI 3 接口(生产环境建议关闭)
  api-docs:
    enabled: true                    # 是否启用 /v3/api-docs 接口,默认 true
    path: /v3/api-docs               # OpenAPI JSON 接口路径,默认 /v3/api-docs
    groups:
      enabled: false                 # 是否启用分组(多版本 API 时使用)

  # Swagger UI 原生界面配置(Knife4j 会覆盖大部分,但保留兼容)
  swagger-ui:
    enabled: true                    # 是否启用原生 Swagger UI,默认 true
    path: /swagger-ui.html           # 原生 UI 访问路径(Knife4j 使用 /doc.html)
    disable-swagger-default-url: true # 禁用默认 Petstore 示例 URL
    supported-submit-methods:        # 支持的提交方法(调试用)
      - get
      - post
      - put
      - delete
    tags-sorter: alpha               # 标签排序:alpha=字母序,method=方法序
    operations-sorter: method        # 操作排序:alpha=字母序,method=请求方法序
    try-it-out-enabled: true         # 是否启用 "Try it out" 调试按钮
    filter: false                    # 是否显示过滤框(按标签过滤)
    syntax-highlight:                # 语法高亮
      activated: true
      theme: atom-one-dark           # 高亮主题:agate, arta, atom-one-dark 等

  # 默认媒体类型(影响 Content-Type 和 Accept)
  default-produces-media-type: application/json
  default-consumes-media-type: application/json

  # 包扫描配置(默认扫描所有 @RestController)
  packages-to-scan:                # 指定扫描的包(可选,用于多模块项目)
    - com.example.demo.controller
  packages-to-exclude:             # 排除的包(如内部接口)
    - com.example.demo.internal

  # 路径配置(可忽略某些路径)
  paths-to-match:                  # 只匹配这些路径(默认全部)
    - /api/**
  paths-to-exclude:                # 排除这些路径(如健康检查)
    - /actuator/**
    - /internal/**

  # 全局操作参数(所有接口自动添加的参数,如 token、traceId)
  global-parameters:
    - name: Authorization
      description: "Bearer Token 认证"
      in: header
      required: false
      schema:
        type: string
      example: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

# ==================== Knife4j 增强配置(企业级功能) ====================
knife4j:
  # 是否启用 Knife4j(生产环境设为 false)
  enable: true

  # 生产环境模式(开启后屏蔽调试、导出等功能,即使 enable=true)
  production: false

  # 基础认证(访问文档需登录)
  basic-auth:
    enable: false                  # 是否开启基础认证
    username: admin                # 认证用户名
    password: 123456               # 认证密码

  # 界面设置(UI 个性化)
  setting:
    # 语言设置
    language: zh-CN                # 界面语言:zh-CN(中文),en-US(英文)

    # 缓存设置
    cache: true                    # 是否缓存参数(刷新页面不丢失调试参数)

    # 页脚设置
    enableFooter: false            # 是否显示页脚
    enableFooterCustom: false      # 是否启用自定义页脚
    footerCustomContent: "© 2025 企业 API 文档系统" # 自定义页脚内容

    # 搜索功能
    enableSearch: true             # 是否启用搜索框(按接口名/描述搜索)

    # OpenAPI 规范按钮
    enableOpenApi: true            # 是否显示 "OpenAPI" 按钮(查看原始 JSON)

    # Schemas 模型显示
    enableSwaggerModels: true      # 是否显示 "Schemas" 标签页(DTO/VO 结构)

    # 调试功能
    enableAfterScript: true        # 是否启用 AfterScript(调试后执行脚本)
    enableDocumentManage: true     # 是否启用文档管理(离线文档、导出等)
    enableDynamicParameter: true   # 是否启用动态参数(调试时动态添加参数)

    # 主题与样式
    theme: default                 # 主题:default, dark, material, layui 等
    showCode: true                 # 是否显示状态码说明

    # 分组设置(多版本 API 时使用)
    enableGroup: false             # 是否启用分组(需配合 springdoc.groups)

  # 文档导出设置(企业常用)
  documents:
    create:
      # 导出 HTML(单页)
      - group: "用户服务"
        name: "用户管理API文档"
        locations: classpath:markdown/user.md # 自定义 Markdown 描述文件
        swaggerUiLink: true        # 是否显示跳转到 Swagger UI 的链接
      # 导出 Word(需额外依赖)
      - group: "订单服务"
        name: "订单API文档"
        type: word                 # 导出类型:html, markdown, word, openapi

  # CORS 配置(如前端独立部署)
  cors:
    enable: false
    allow-credentials: true
    allowed-headers: "*"
    allowed-methods: "*"
    allowed-origins: "*"

  # 网关聚合配置(Spring Cloud Gateway 项目使用)
  gateway:
    discover:
      enabled: false               # 是否启用服务发现(自动聚合微服务)
    strategies:
      - service-name: user-service # 下游服务名
        context-path: /user        # 网关路由前缀
      - service-name: order-service
        context-path: /order

  # 安全拦截(自定义权限控制)
  secure:
    enable: false                  # 是否启用安全拦截
    roles:                         # 允许访问的角色(需集成 Spring Security)
      - ROLE_ADMIN
      - ROLE_DEV

# ==================== 可选:日志与监控 ====================
logging:
  level:
    io.swagger: WARN              # 降低 Swagger 日志级别
    org.springdoc: WARN

management:
  endpoints:
    web:
      exposure:
        include: health,info      # 暴露健康检查端点(排除在 API 文档外)

✅ 配置项分类说明

一、springdoc 配置作用

配置项作用推荐值
api-docs.enabled是否生成 OpenAPI JSON 接口开发环境 true,生产环境 false
api-docs.pathOpenAPI JSON 路径/v3/api-docs(默认)
swagger-ui.path原生 Swagger UI 路径/swagger-ui.html(Knife4j 用 /doc.html
packages-to-scan指定扫描 Controller 包多模块项目推荐指定
paths-to-exclude排除某些路径(如 Actuator)必须排除 /actuator/**
global-parameters全局参数(如 Token)推荐添加 Authorization

二、knife4j 配置作用

配置项作用推荐值
enable是否启用 Knife4j UI开发环境 true,生产环境 false
production生产模式(屏蔽敏感功能)生产环境 true
basic-auth.enable是否开启登录认证企业内网可开启
setting.language界面语言zh-CN(中文)
setting.cache是否缓存调试参数true(提升体验)
setting.theme界面主题defaultdark
setting.enableDocumentManage是否启用文档导出true(企业推荐)
documents.create自定义导出文档按需配置 HTML/Word
gateway.discover.enabled是否聚合微服务网关项目设为 true

✅ 生产环境推荐配置(application-prod.yml)

springdoc:
  api-docs:
    enabled: false   # 关闭 OpenAPI 接口
  swagger-ui:
    enabled: false   # 关闭原生 UI

knife4j:
  enable: false      # 关闭 Knife4j
  production: true   # 开启生产模式(双重保险)

或通过启动参数禁用:

java -jar app.jar --springdoc.api-docs.enabled=false --knife4j.enable=false

✅ 开发环境推荐配置(application-dev.yml)

springdoc:
  api-docs:
    enabled: true
  swagger-ui:
    enabled: true

knife4j:
  enable: true
  production: false
  basic-auth:
    enable: false    # 开发环境可关闭认证
  setting:
    language: zh-CN
    cache: true
    enableDocumentManage: true

✅ 多环境激活配置(application.yml)

spring:
  profiles:
    active: dev      # 默认激活开发环境

---
spring:
  config:
    activate:
      on-profile: dev
# 引用 application-dev.yml 内容

---
spring:
  config:
    activate:
      on-profile: prod
# 引用 application-prod.yml 内容

✅ 配置验证

启动项目后访问:

  • 🔹 Knife4j UI:http://localhost:8080/doc.html
  • 🔹 原生 Swagger UI:http://localhost:8080/swagger-ui.html
  • 🔹 OpenAPI JSON:http://localhost:8080/v3/api-docs

检查:

✅ 界面是否为 Knife4j 增强风格
✅ 是否按配置排除了 Actuator 路径
✅ 是否支持中文、缓存、导出等功能
✅ 生产环境是否正确关闭


✅ 总结:企业级配置最佳实践

场景配置策略
开发环境开启所有功能,中文界面,参数缓存,文档导出
测试环境开启 Knife4j,关闭原生 UI,可开启 Basic Auth
生产环境完全关闭 API 文档(enable=false),或仅限内网 IP 访问
微服务网关开启 gateway.discover.enabled=true,聚合下游服务
安全要求高开启 basic-auth 或集成 Spring Security 权限控制

📌 提示

  • 配置不是越多越好,根据团队和项目需求调整。
  • 生产环境务必关闭或保护 API 文档,避免信息泄露。
  • 使用 @Profile 或外部配置中心(Nacos/Consul)管理多环境配置。

通过以上详细配置,你可以在 Spring Boot 3 项目中安全、灵活、高效地使用 SpringDoc + Knife4j,打造专业级 API 文档系统!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值