Skip to content

配置参考 ​

本页列出所有 knife4j.* YAML 配置属性,按使用场景分组。

属性源自 @ConfigurationProperties 类定义。部分 UI 配置在 React 前端暂不生效,已用 ⚠️ 标注。

WebMvc Starter 通用配置 ​

适用于 knife4j-openapi2-spring-boot-starter、knife4j-openapi3-spring-boot-starter、knife4j-openapi3-jakarta-spring-boot-starter、knife4j-openapi3-boot4-spring-boot-starter。

knife4j.* ​

属性类型默认值说明
knife4j.enablebooleanfalse启用 Knife4j 后端增强。openapi2 必须设为 true;openapi3 使用 springdoc 默认路径时 UI 可不依赖它,但自定义 springdoc.api-docs.path、生产保护或其他 Knife4j 增强能力需要设为 true
knife4j.corsbooleanfalse启用默认跨域支持
knife4j.productionbooleanfalse生产环境:设为 true 后 /doc.html、/v2/api-docs、/v3/api-docs、/knife4j/config 等默认路径返回 JSON 错误响应(非 HTML 页面)。注意:当前仅保护默认路径;若自定义了 springdoc.api-docs.path,需要自行通过 knife4j.basic.include 追加规则或使用外层安全框架屏蔽
knife4j.openapiObject—OpenAPI 基本信息(仅 openapi2 starter,见下文)
knife4j.basicObject—HTTP Basic 认证配置,见下文
knife4j.settingObject—UI 个性化配置,见下文
knife4j.documentsList—自定义 Markdown 文档分组,见下文
knife4j.insightObject—Knife4jInsight 配置,见下文

OpenAPI3 starter 会暴露 /knife4j/config 作为 Knife4j UI 的运行时发现入口。该接口不属于 springdoc 标准接口,由 UI 内部调用,并会从 OpenAPI 文档中隐藏,不展示在 doc.html 接口列表里。它用于在自定义 springdoc.api-docs.path 时返回实际的 apiDocsUrl 与 swaggerConfigUrl;响应通过 schemaVersion 标识契约版本,后续 Knife4j 运行时能力也应挂载在这个结构下。

OpenAPI3 文档标题与版本 ​

OpenAPI3 系列 starter(含 Boot 4)不会读取 knife4j.openapi.title / knife4j.openapi.version。React UI 的浏览器标题、首页标题和版本号都来自 OpenAPI 标准字段 info.title 与 info.version;未配置时 springdoc 默认会给出 OpenAPI definition 与 v0。

推荐用 springdoc/OpenAPI 标准方式配置:

java
@Bean
public OpenAPI customOpenAPI() {
    return new OpenAPI()
            .info(new Info()
                    .title("用户中心接口文档")
                    .version("1.0.0")
                    .description("用户中心 OpenAPI 文档"));
}

也可以在启动类上使用 @OpenAPIDefinition(info = @Info(...))。knife4j.openapi.* 只保留给 openapi2 starter 的自动 Docket 注册使用。

生成 OpenAPI 3.1 文档 ​

springdoc.api-docs.version 是 springdoc 配置,不是 knife4j.* 配置。Boot 3 项目可显式配置生成版本(5.7.7 使用 springdoc 2.8.9,待发布源码使用 2.9.1):

yaml
springdoc:
  api-docs:
    version: OPENAPI_3_1

待发布源码使用 springdoc 2.9.1 / Swagger Jakarta 2.2.55 时,OAS 3.1 的 raw Java Object 字段和 List<Object> 元素默认不声明类型,允许任意 JSON 值。需要保留旧的“仅 JSON 对象” 契约时,可按应用需要显式配置;该配置也影响该应用内其他 raw Object Schema:

yaml
springdoc:
  explicit-object-schema: true

该选择仅收紧文档 Schema,不改变 Java 字段的实际反序列化能力。若业务明确只允许 JSON 对象, 也可在对应字段上使用 @Schema(type = "object"),而无需对整个应用强制配置。

Boot 4 / springdoc 3.0.3 的默认与显式 OPENAPI_3_1 路径都已经验证;显式配置有助于让意图不受依赖默认值变化影响。 Boot 2 / springdoc 1.8.0 继续生成 OpenAPI 3.0,不能只改文档版本字符串。完整生成矩阵、JSON Schema 方言、 外部资源授权和迁移示例见 OpenAPI 3.1 支持与迁移。当前生产依赖不会生成 OpenAPI 3.2; 3.2 消费契约见 OpenAPI 3.2 支持矩阵。

反向代理 / 网关放行

当应用部署在网关或反向代理之后时,请确保 /knife4j/config(与 /doc.html、/v3/api-docs/**、/swagger-ui/**、/webjars/** 一起)能透传到后端。常见情况:

  • 仅显式放行 /v3/api-docs/** 与 /swagger-ui/** 的网关白名单需要补上 /knife4j/config,否则 React UI 在自定义 springdoc.api-docs.path 时无法发现实际 swagger-config 地址,落到 origin 兜底逻辑。
  • 启用 knife4j.basic 时该路径会自动纳入 Basic 认证保护(已带分号绕过修复),不需要额外配置。
  • 如果通过 knife4j.production=true 屏蔽默认入口,/knife4j/config 会一同返回 JSON 错误响应,是预期行为。

knife4j.basic.* ​

属性类型默认值说明
knife4j.basic.enablebooleanfalse启用 Basic 认证
knife4j.basic.usernameString—用户名
knife4j.basic.passwordString—密码
knife4j.basic.includeList<String>—需要认证的 URL(正则表达式,since 4.1.0)

knife4j.setting.* ​

属性类型默认值说明React UI
knife4j.setting.languageZH_CN / EN / JA_JPZH_CN界面语言✅
knife4j.setting.enableSwaggerModelsbooleantrue显示 Swagger Models 功能✅
knife4j.setting.swaggerModelNameString"Swagger Models"Swagger Models 名称✅
knife4j.setting.enableDocumentManagebooleantrue显示文档管理功能✅
knife4j.setting.enableReloadCacheParameterbooleanfalse显示调试后刷新变量按钮⚠️
knife4j.setting.enableAfterScriptbooleantrue显示 afterScript 功能⚠️
knife4j.setting.enableVersionbooleanfalse提示新增和已变化的接口(OpenAPI 3.0.x / 3.1.x / 3.2.x)✅
knife4j.setting.enableRequestCachebooleantrue启用请求参数缓存✅
knife4j.setting.enableFilterMultipartApisbooleanfalse过滤 RequestMapping 多方法显示✅
knife4j.setting.enableFilterMultipartApiMethodTypeString"POST"过滤方法类型✅
knife4j.setting.enableHostbooleanfalse启用 Host✅
knife4j.setting.enableHostTextString""Host 地址✅
knife4j.setting.enableDynamicParameterbooleanfalse允许在 urlencoded / multipart Body 中添加文档未声明的文本字段✅
knife4j.setting.enableDebugbooleantrue启用调试功能✅
knife4j.setting.enableFooterbooleantrue显示默认 Footer✅
knife4j.setting.enableFooterCustombooleanfalse自定义 Footer✅
knife4j.setting.footerCustomContentString—自定义 Footer 内容(支持 Markdown)✅
knife4j.setting.enableSearchbooleantrue显示搜索框✅
knife4j.setting.enableOpenApibooleantrue显示 OpenAPI 原始结构 Tab✅
knife4j.setting.enableHomeCustombooleanfalse启用首页自定义✅
knife4j.setting.homeCustomLocationString—首页自定义 Markdown 内容(通常由后端根据 homeCustomPath 读取后注入)✅
knife4j.setting.enableGroupbooleantrue显示分组下拉框✅
knife4j.setting.enableResponseCodebooleantrue显示响应状态概要(状态码、说明、Schema 和 Media Type)✅
knife4j.setting.customCodeInteger200生产环境屏蔽时的自定义 HTTP 状态码✅

React 新前端会读取后端注入到 OpenAPI JSON 的 x-openapi.x-setting,但只消费表中标 ✅ 的 UI 字段;用户在前端设置面板中的本地选择会覆盖后端默认值。标 ⚠️ 的 enableAfterScript / enableReloadCacheParameter 仍会由后端写入 extension,React 暂不消费;这两项存在于 Vue2 基线,并已移植到 Vue3。enableVersion 与 enableRequestCache 已在 React 接通。详见 FAQ。

enableDynamicParameter 在 React UI 中只控制 application/x-www-form-urlencoded 和 multipart/form-data 请求体的未声明文本字段。Query、Header、Cookie 的自定义参数能力始终可用,不受该开关控制;Path 参数、JSON/raw Body 和动态 file part 不在该开关的支持范围内。

enableVersion 在 React UI 中使用浏览器本地基线比较当前 OpenAPI 3.0.x、3.1.x 或 3.2.x 文档。首次开启或缓存 schema 升级时只建立新基线;后续新增接口显示 NEW,Operation 或其可达组件/Schema 资源语义变化时显示变化标记。3.0、3.1 与 3.2 使用独立基线;3.1 / 3.2 只基于已加载的完整资源图计算,不会在指纹阶段联网。文档存在结构/本地引用诊断、外部资源未授权、加载/校验失败、超出安全预算或使用不支持的 Schema dialect 时会暂停跟踪并保留上一份完整基线。3.2 变化跟踪从 Java 5.7.0 起提供,详见 OpenAPI 3.2 支持矩阵。

各配置项的功能说明和示例见 功能详解。

knife4j.documents(列表) ​

yaml
knife4j:
  documents:
    - group: 2.X版本
      name: 测试文档
      locations: classpath:markdown/*
属性类型说明
groupString所属分组
nameString文档名称
locationsStringMarkdown 文件路径(classpath 前缀)

knife4j.insight.*(since 4.4.0) ​

属性类型默认值说明
knife4j.insight.enablebooleanfalse启用 Knife4jInsight 自动上传
knife4j.insight.serverString—Insight 数据源地址(如 http://console.knife4j.net)
knife4j.insight.secretString—上传凭证密钥
knife4j.insight.namespaceString—上传命名空间(默认从应用名生成)
knife4j.insight.serviceNameString—上传服务名(默认取 spring.application.name)

knife4j.openapi.*(仅 openapi2 starter) ​

属性类型默认值说明
knife4j.openapi.titleString—文档标题
knife4j.openapi.descriptionString—描述
knife4j.openapi.versionString—版本号
knife4j.openapi.emailString—联系邮箱
knife4j.openapi.urlString—主页 URL
knife4j.openapi.concatString—联系人
knife4j.openapi.termsOfServiceUrlString—服务条款 URL
knife4j.openapi.licenseString—许可证
knife4j.openapi.licenseUrlString—许可证 URL
knife4j.openapi.groupMap—分组配置(key 为分组名)

knife4j.openapi.group.<name>.*

属性类型说明
groupNameString分组名称
apiRulePACKAGE / ANNOTATIONAPI 扫描策略
apiRuleResourcesList<String>策略对应资源(包名或注解类名)
pathRuleANT / REGEX路径匹配策略
pathRuleResourcesList<String>路径资源

Gateway Starter 配置 ​

适用于 knife4j-gateway-spring-boot-starter、knife4j-gateway-webmvc-spring-boot-starter 和 knife4j-gateway-boot4-spring-boot-starter。

knife4j-gateway-webmvc-spring-boot-starter 仅适用于 Boot 3.5 的 Spring Cloud Gateway Server Web MVC。其 DISCOVER 只读取 spring.cloud.gateway.server.webmvc.routes 中已配置的 lb:// + Path 路由,不会从注册中心创建或读取动态 Gateway 路由。

knife4j.gateway.* ​

属性类型默认值说明
knife4j.gateway.enabledbooleanfalse启用 Gateway 聚合
knife4j.gateway.strategyMANUAL / DISCOVERMANUAL聚合策略
knife4j.gateway.tagsSorteralpha / orderalphaTag 排序规则
knife4j.gateway.operationsSorteralpha / orderalphaOperation 排序规则
knife4j.gateway.basicObject—Basic 认证(同 knife4j.basic)
knife4j.gateway.discoverObject—服务发现配置
knife4j.gateway.routesList—手动路由配置

knife4j.gateway.discover.* ​

属性类型默认值说明
enabledBooleanFALSE启用服务发现
excludedServicesSet<String>—排除的服务名(支持正则,since 4.3.0)
versionOpenAPI3 / Swagger2OpenAPI3规范版本

knife4j.gateway.routes[] ​

yaml
knife4j:
  gateway:
    enabled: true
    routes:
      - name: 用户服务
        serviceName: user-service
        url: /v3/api-docs
        contextPath: /
        order: 1
属性类型默认值说明
nameString—分组名称(UI 显示)
serviceNameString—服务名
urlString"/v2/api-docs?group=default"OpenAPI 数据源路径
contextPathString"/"上下文路径(since 4.1.0)
orderInteger0排序(升序)

聚合 Starter 配置 ​

适用于 knife4j-aggregation-spring-boot-starter、knife4j-aggregation-jakarta-spring-boot-starter 和 knife4j-aggregation-boot4-spring-boot-starter。

knife4j.enableAggregation ​

属性类型默认值说明
knife4j.enableAggregationbooleanfalse启用聚合模式

knife4j.disk.* ​

属性类型默认值说明
knife4j.disk.enablebooleanfalse启用 Disk 模式
knife4j.disk.routesList—Disk 路由列表

knife4j.disk.routes[]

属性类型默认值说明
nameString—服务名(UI 分组显示)
locationString—OpenAPI 文件路径(classpath 或 URL)
debugUrlString—调试目标 URL
swaggerVersionString"2.0"规范版本(2.0 或 3.0)
servicePathString—微服务路径(网关 basePath)
orderInteger1排序

knife4j.cloud.* ​

属性类型默认值说明
knife4j.cloud.enablebooleanfalse启用 Cloud 模式
knife4j.cloud.routesList—Cloud 路由列表
knife4j.cloud.routeAuthObject—通用路由认证

knife4j.cloud.routes[]

属性类型说明
nameString服务名
uriStringOpenAPI 实例 URI(如 http://192.168.0.1:8999)
locationStringOpenAPI 文件路径
debugUrlString调试目标 URL
swaggerVersionString规范版本
servicePathString微服务路径
routeAuthObject路由级认证(覆盖通用配置)
orderInteger排序

knife4j.nacos.* ​

属性类型默认值说明
knife4j.nacos.enablebooleanfalse启用 Nacos 模式
knife4j.nacos.serviceUrlString—Nacos 地址(如 http://192.168.0.1:8848/nacos)
knife4j.nacos.secretString—接口访问密钥
knife4j.nacos.serviceAuthObject—Nacos 注册中心认证
knife4j.nacos.routeAuthObject—通用路由认证
knife4j.nacos.routesList—Nacos 路由列表

knife4j.nacos.routes[]

属性类型说明
serviceNameString服务名(必填)
groupNameStringNacos 分组
namespaceIdString命名空间 ID
clustersString集群名(逗号分隔)
(继承 CommonRoute) name, location, debugUrl, swaggerVersion, servicePath, order, routeAuth同 Cloud 路由

knife4j.eureka.* ​

属性类型默认值说明
knife4j.eureka.enablebooleanfalse启用 Eureka 模式
knife4j.eureka.serviceUrlString—Eureka 地址(如 http://localhost:10000/eureka/)
knife4j.eureka.serviceAuthObject—Eureka 注册中心认证
knife4j.eureka.routeAuthObject—通用路由认证
knife4j.eureka.routesList—Eureka 路由列表

knife4j.eureka.routes[]

属性类型说明
serviceNameString服务名(必填)
(继承 CommonRoute) name, location, debugUrl, swaggerVersion, servicePath, order, routeAuth同 Cloud 路由

knife4j.polaris.* ​

属性类型默认值说明
knife4j.polaris.enablebooleanfalse启用 Polaris 模式
knife4j.polaris.serviceUrlString—Polaris 地址
knife4j.polaris.serviceAuthObject—Polaris 注册中心认证
knife4j.polaris.jwtCookieString—接口访问 JWT Cookie
knife4j.polaris.routeAuthObject—通用路由认证
knife4j.polaris.routesList—Polaris 路由列表

knife4j.polaris.routes[]

属性类型说明
serviceString服务名(必填)
namespaceString命名空间 ID
(继承 CommonRoute) name, location, debugUrl, swaggerVersion, servicePath, order, routeAuth同 Cloud 路由

knife4j.openapiv3.*(聚合 Jakarta 版) ​

属性类型默认值说明
knife4j.openapiv3.urlString"/v3/api-docs"OpenAPI 数据源 URL
knife4j.openapiv3.oauth2RedirectUrlString""OAuth2 重定向 URL
knife4j.openapiv3.validatorUrlString""Validator URL
knife4j.openapiv3.tagsSorteralpha / orderalphaTag 排序规则(since 4.5.0)
knife4j.openapiv3.operationsSorteralpha / orderalphaOperation 排序规则(since 4.5.0)

knife4j.basic-auth.*(聚合版) ​

属性类型默认值说明
knife4j.basic-auth.enablebooleanfalse启用认证
knife4j.basic-auth.usernameString—用户名
knife4j.basic-auth.passwordString—密码

knife4j.connection-setting.* ​

属性类型默认值说明
knife4j.connection-setting.socketTimeoutint10000Socket 超时(ms)
knife4j.connection-setting.connectTimeoutint10000连接超时(ms)
knife4j.connection-setting.maxConnectionTotalint200最大连接数
knife4j.connection-setting.maxPreRouteint20单路由最大连接数

反向代理场景(nginx prefix / X-Forwarded-Prefix) ​

当应用部署在 nginx 等反向代理后面,外网访问路径带有前缀(如 /prod-api/dispatch),而 knife4j 前端拼出的 api-docs URL 没有该前缀时,会出现 404。这是 upstream #849 描述的典型场景。

推荐方案:标准 Forwarded Header 透传 ​

Spring Boot 侧(application.yml):

yaml
server:
  forward-headers-strategy: framework

nginx 侧:

nginx
# 注意:location 末尾的斜杠与 proxy_pass 末尾的斜杠配合,
# 让 nginx 在转发时自动剥离 /prod-api/dispatch 前缀。
# X-Forwarded-Prefix 不带末尾斜杠,与 Spring 的 ForwardedHeaderFilter 期望一致。
location /prod-api/dispatch/ {
    proxy_pass http://backend:8080/;
    proxy_set_header X-Forwarded-Prefix /prod-api/dispatch;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host  $host;
    proxy_set_header X-Forwarded-Port  $server_port;
}

配置生效后,springdoc 会通过标准 ForwardedHeaderFilter 自动派生 base URL,/v3/api-docs/swagger-config 返回的 urls[].url 将携带 /prod-api/dispatch 前缀,knife4j 前端可正常加载文档。

验证方式 ​

bash
# 带前缀 header 请求,urls[].url 应包含 /prod-api/dispatch
curl -s -H "X-Forwarded-Prefix: /prod-api/dispatch" \
     http://localhost:8080/v3/api-docs/swagger-config | jq '.urls'

# 不带 header 请求,作为对照(url 不含前缀)
curl -s http://localhost:8080/v3/api-docs/swagger-config | jq '.urls'

注意事项 ​

  • server.forward-headers-strategy=framework 会注册 Spring 的 ForwardedHeaderFilter,它在 Servlet 层面重写 HttpServletRequest 的 scheme/host/contextPath,对所有 springdoc 端点透明生效,无需修改 knife4j 配置。
  • 若使用 server.forward-headers-strategy=native,则由容器(Tomcat/Jetty)处理 X-Forwarded-Proto/Host/Port,但不支持 X-Forwarded-Prefix(Tomcat 原生不识别该 header),因此 native 模式无法完成 prefix 重写,不适用于本场景;请使用 framework。
  • 若同时启用了 knife4j.basic.enable=true,需确认 nginx 传递的路径与 knife4j.basic.include 规则匹配,否则带前缀的 api-docs 请求会被 Basic Auth filter 拦截返回 401。
  • Spring Boot 3.x(Jakarta / Spring Framework 6.x)与 Spring Boot 2.7.x(javax / Spring Framework 5.3)均支持上述配置。注意:ForwardedHeaderFilter 在 Spring Framework 6.x 中若重复注册会抛出异常(IllegalStateException),请勿在 WebMvcConfigurer 中手动再注册一次;Spring Framework 5.3 对重复注册的处理较宽松,但同样建议避免。

配置示例 ​

最小配置(WebMvc + OpenAPI3) ​

yaml
knife4j:
  enable: true

这依赖 springdoc 的默认路径:OpenAPI JSON 为 /v3/api-docs,Swagger UI 为 /swagger-ui.html。 knife4j.setting.language 默认是 zh_cn,无需为中文界面重复配置。

如果需要收窄 Controller 扫描范围、改变排序或关闭 springdoc 的通用响应包装,请按项目需要追加:

yaml
springdoc:
  override-with-generic-response: false
  packages-to-scan: com.example.demo.controller
  paths-to-match: /api/**
  swagger-ui:
    tags-sorter: alpha

@ApiSupport.order 的 Tag 排序增强会按 springdoc.packages-to-scan 和 springdoc.group-configs[].packages-to-scan 扫描 Controller;如果没有配置扫描包,operation 级 x-order 仍会写入,但 Tag 级排序可能无法推断。

生产环境配置 ​

yaml
knife4j:
  enable: true
  production: true
  basic:
    enable: true
    username: admin
    password: ${DOC_PASSWORD}

生产环境响应格式:production=true 时,被屏蔽的请求返回 application/json 格式的错误响应({"code":403,"message":"..."}),而非 HTML 错误页面,避免前端 JSON.parse 时抛出 Unexpected token '<', "<!DOCTYPE "... 异常。

Gateway 聚合配置(DISCOVER 模式) ​

yaml
knife4j:
  gateway:
    enabled: true
    strategy: discover
    discover:
      enabled: true
      version: openapi3
      excludedServices:
        - gateway-service
    basic:
      enable: true
      username: admin
      password: ${DOC_PASSWORD}

Nacos 聚合配置 ​

yaml
knife4j:
  enableAggregation: true
  nacos:
    enable: true
    serviceUrl: http://127.0.0.1:8848/nacos
    routes:
      - name: 用户服务
        serviceName: user-service
        groupName: DEFAULT_GROUP
        namespaceId: public

让 OpenAPI 文档更清晰,让接口联调更顺手。