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

OpenAPI Generator Go-Gin参数组件生成及JSON标签移除问询

OpenAPI Generator Go-Gin-Server 参数结构体生成问题解决

环境

  • OpenAPI Generator 7.1.0
  • OpenAPI Spec 3.0.3

需求与问题

需求1:生成带Gin兼容字段标签的参数结构体

需要从OpenAPI Spec的parameters组件生成如下格式的Go结构体,配合Gin做参数验证:

type Request struct {
    PersonId 
    OrgId
}

type PersonId struct {
    PersonId string `uri:"id" binding:"required"`
}

type OrgId struct {
    OrgId string `form:"orgId" binding:"required"`
}

但go-gin-server生成器无法生成这种参数组件结构,也找不到对应配置项。

需求2:移除JSON字段标签(需求1无解时)

当前生成的结构体带有JSON标签,导致Gin验证失败,问题代码如下:

type Request struct {
    Person `json:"person"`
    Org    `json:"org"`
}

type PersonId struct {
    PersonId string `json:"id" binding:"required"`
}

type OrgId struct {
    OrgId string `json:"orgId" binding:"required"`
}

当前使用的生成命令

openapi-generator generate \
    --input-spec api-spec.yml \
    --generator-name go-gin-server \
    --output generated

解决方案

针对需求1的解决办法

go-gin-server生成器默认不支持直接从parameters组件生成这种嵌套带标签的结构体,可通过以下两种方式实现:

  1. 修改OpenAPI Spec添加扩展字段
    在parameters的每个参数定义里,通过x-go-tag扩展字段直接指定需要的标签。示例Spec片段:
parameters:
  - name: id
    in: path
    required: true
    schema:
      type: string
    x-go-tag: 'uri:"id" binding:"required"'
  - name: orgId
    in: query
    required: true
    schema:
      type: string
    x-go-tag: 'form:"orgId" binding:"required"'

生成器会读取x-go-tag的值作为字段标签,若要生成嵌套结构体,还需调整模板逻辑来拆分参数组。

  1. 自定义生成模板
    用openapi-generator config-help -g go-gin-server查看go-gin-server的模板路径,复制原有模板文件,修改结构体生成逻辑,让它从parameters组件拆分出嵌套结构体,并将参数的in属性(path对应uri,query/form对应form)和必填属性转换为对应的binding标签。

针对需求2的解决办法

要移除生成代码中的JSON标签,有两种快速方案:

  1. 添加配置参数
    在生成命令中加入--additional-properties=skipJsonTags=true,这个参数会让生成器跳过JSON标签的生成:
openapi-generator generate \
    --input-spec api-spec.yml \
    --generator-name go-gin-server \
    --output generated \
    --additional-properties=skipJsonTags=true

注意:需确认7.1.0版本是否支持该配置,若不支持则用模板修改方案。

  1. 修改模板移除JSON标签
    找到模板中的model.mustache文件(负责结构体字段生成),找到生成标签的代码段,删掉json:"{{.JsonProperty}}"这部分内容,只保留binding:"{{.Required}}"相关的标签逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:35:59