go-gin代码生成中maxLength/minLength规则丢失问题咨询
解答
1. 规则未保留的原因
这不是你的操作错误,而是OpenAPI Generator的默认行为:它不会将minLength/maxLength这类验证规则写入json标签中——json标签仅负责JSON序列化/反序列化时的字段映射,不承载业务验证规则。
另外,你的Schema存在冗余代码:properties块外重复了type: string、长度限制和required规则,这部分属于无效冗余,建议清理为标准格式:
SerialNumber: type: object description: | A serial number of an entity. This is a basic string but with length limitations. Hence a separate type to uniquely identify such entities. properties: serial: type: string minLength: 5 maxLength: 128 required: [serial]
2. 在Go代码中获取并应用长度限制的方法
你可以通过以下方式让生成的代码包含验证规则:
- 启用验证标签生成:在使用openapi-generator生成代码时,添加参数
--additional-properties=enableValidation=true。生成后的结构体字段会带上validate标签,示例:
之后可以配合type SerialNumber struct { Serial string `json:"serial" validate:"min=5,max=128"` }go-playground/validator这类验证库,在Gin接口中对请求参数做校验。 - 查看自动生成的验证文件:部分Go-Gin模板会生成单独的验证逻辑文件(如
serial_number_validation.go),里面会包含长度限制的判断逻辑,直接调用即可。
3. 关于json标签的预期误区
json标签的作用仅为指定JSON字段与Go结构体字段的映射关系(如字段名、是否忽略空值等),不会承载验证规则。验证规则通常通过专门的标签(如validate)、独立的验证函数或配置文件来实现,这是Go生态的通用实践。
内容的提问来源于stack exchange,提问作者Kay Dee
相关产品推荐
相关产品推荐

