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组件生成这种嵌套带标签的结构体,可通过以下两种方式实现:
- 修改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的值作为字段标签,若要生成嵌套结构体,还需调整模板逻辑来拆分参数组。
- 自定义生成模板
用openapi-generator config-help -g go-gin-server查看go-gin-server的模板路径,复制原有模板文件,修改结构体生成逻辑,让它从parameters组件拆分出嵌套结构体,并将参数的in属性(path对应uri,query/form对应form)和必填属性转换为对应的binding标签。
针对需求2的解决办法
要移除生成代码中的JSON标签,有两种快速方案:
- 添加配置参数
在生成命令中加入--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版本是否支持该配置,若不支持则用模板修改方案。
- 修改模板移除JSON标签
找到模板中的model.mustache文件(负责结构体字段生成),找到生成标签的代码段,删掉json:"{{.JsonProperty}}"这部分内容,只保留binding:"{{.Required}}"相关的标签逻辑。
内容的提问来源于stack exchange,提问作者suspense_hey
相关产品推荐
相关产品推荐

