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)