You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fastify addSchema生成OpenAPI 2.0定义出现def-*前缀 如何自定义有意义名称

问题原因

fastify-swagger v4.x版本生成OpenAPI 2.0(Swagger 2.0)格式的定义时,默认不会读取schema的title字段作为定义的键名,只会按照schema的加载顺序自动生成def-数字格式的默认键名。

解决方法

方案一(兼容性最高,无需修改现有schema)

注册fastify-swagger插件时新增refResolver配置,直接复用你已设置的title字段作为定义键名,配置示例如下:

fastify.register(require('fastify-swagger'), {
  routePrefix: '/swagger',
  swagger: {
    info: {
      title: '接口文档标题',
      version: '1.0.0'
    },
    // 其他原有swagger配置保持不变
  },
  // 新增自定义引用解析规则
  refResolver: {
    buildLocalReference (json, baseUri, fragment, i) {
      // 优先取自定义title作为键名,无title时 fallback 到默认编号规则
      return json.title || `def-${i}`
    }
  },
  exposeRoute: true
})

配置完成后重新启动服务,生成的Swagger定义就会直接用你设置的title值作为定义的键名。

方案二(适合新增schema场景)

如果不想修改插件配置,也可以直接将addSchema中的$id字段值设置为你想要的定义键名即可:

fastify.addSchema({
  $id: 'PersistenceQueryParams', // 直接写目标键名
  title: "PersistenceQueryParams",
  type: 'object',
  description: 'Persistence Service GET API URL query specification. Applicable for GET API only.',
  properties: {
    // 原有属性配置不变
  },
});

内容的提问来源于stack exchange,提问作者Pradip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 20:57:04