From 7307c85cfd94a3064e04e90be2bbc835570756cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Thu, 13 Feb 2025 16:18:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BF=85=E4=BC=A0=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E9=87=8D=E5=A4=8D=E8=A7=A3=E6=9E=90=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20+=20=E4=BC=98=E5=8C=96=E7=9B=B8=E5=90=8C=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E4=BD=93=E6=9C=AA=E5=8E=BB=E9=87=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- generate.go | 22 ++++++++++++++++++---- parser_test.go | 4 ++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/generate.go b/generate.go index 10c0ff7..8f969ae 100644 --- a/generate.go +++ b/generate.go @@ -276,6 +276,10 @@ func (g *Generate) AddComponentsSchema(rootSchemaName string, pkgPath string, in inputNameArr := strings.Split(inputType.Name(), ".") inputName := inputNameArr[len(inputNameArr)-1] schemaName := strings.ReplaceAll(pkgPath+"."+inputName, "/", "-") + if _, exist := g.docData.Components.Schemas[schemaName]; exist { + // 已存在, 无需重复生成 + return schemaName + } if _, exist := g.docData.Components.Schemas[schemaName]; !exist { s := &define.Schema{ Nullable: false, @@ -322,10 +326,8 @@ func (g *Generate) AddComponentsSchema(rootSchemaName string, pkgPath string, in } // g.docData.Components.Schemas[schemaName].Ref = consts.SwaggerDataTypeObject for i := 0; i < inputType.NumField(); i++ { - if ValidateRule.IsRequired(inputType.Field(i)) { - // 必传字段 - g.docData.Components.Schemas[schemaName].Required = append(g.docData.Components.Schemas[schemaName].Required, ParseStructField.GetParamName(inputType.Field(i))) - } + // 设置参数各种属性 + g.setStructFieldProperty(schemaName, inputType.Field(i)) if inputType.Field(i).Type.Kind() == reflect.Ptr || inputType.Field(i).Type.Kind() == reflect.Struct || @@ -461,3 +463,15 @@ func (g *Generate) realType2SwaggerType(realType string) string { } return g.realBaseType2SwaggerType(realType) } + +// setStructFieldProperty 添加struct_field各种属性 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 16:13 2025/2/13 +func (g *Generate) setStructFieldProperty(schemaName string, structField reflect.StructField) { + paramName := ParseStructField.GetParamName(structField) + if ValidateRule.IsRequired(structField) { + g.docData.Components.Schemas[schemaName].Required = append(g.docData.Components.Schemas[schemaName].Required, paramName) + } +} diff --git a/parser_test.go b/parser_test.go index 25c293d..edda094 100644 --- a/parser_test.go +++ b/parser_test.go @@ -28,8 +28,8 @@ func Test_parser_Openapi3(t *testing.T) { Age int `json:"age" d:"18" desc:"年龄" binding:"required"` } type List struct { - Total int64 `json:"total"` - UserList []User `json:"user_list" binding:"required"` + Total int64 `json:"total" binding:"required"` + UserList []User `json:"user_list"` } var l List g := NewOpenapiDoc(nil, nil)