From 4e54b5fe33d1fc5bf8bb1795316fd78bc3506e00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Tue, 18 Feb 2025 12:36:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8C=BF=E5=90=8D=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E4=B8=AD=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=8C=87=E9=92=88=E8=A7=A3=E6=9E=90=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- generate.go | 18 +++++++++--------- parser_test.go | 5 +++-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/generate.go b/generate.go index 7544aee..b1cdf44 100644 --- a/generate.go +++ b/generate.go @@ -606,23 +606,23 @@ func (g *Generate) handleAnonymousField(schemaName string, field reflect.StructF } for i := 0; i < handleType.NumField(); i++ { if handleType.Field(i).Anonymous { - // 地柜处理多层嵌套匿名字段 + // 递归处理多层嵌套匿名字段 g.handleAnonymousField(schemaName, handleType.Field(i)) continue } else { itemField := handleType.Field(i) - if itemField.Type.Kind() == reflect.Map || itemField.Type.Kind() == reflect.Slice || itemField.Type.Kind() == reflect.Array || itemField.Type.Kind() == reflect.Struct || itemField.Type.Kind() == reflect.Ptr { - g.AddComponentsSchema(schemaName, handleType.Field(i).Type.PkgPath(), handleType.Field(i).Type) + baseConvertType, isBaseType := g.realBaseType2SwaggerType(itemField.Type.String()) + if !isBaseType { + g.AddComponentsSchema(schemaName, itemField.Type.PkgPath(), itemField.Type) continue } else { - convertBaseType, _ := g.realBaseType2SwaggerType(handleType.Field(i).Type.String()) paramName := ParseStructFieldTag.GetParamName(itemField) g.docData.Components.Schemas[schemaName].Properties[paramName] = &define.Property{ - Type: convertBaseType, - Format: handleType.Field(i).Type.String(), - Enum: ValidateRule.Enum(handleType.Field(i)), - Default: ParseStructFieldTag.GetDefaultValue(handleType.Field(i)), - Description: ParseStructFieldTag.GetParamDesc(handleType.Field(i)), + Type: baseConvertType, + Format: itemField.Type.String(), + Enum: ValidateRule.Enum(itemField), + Default: ParseStructFieldTag.GetDefaultValue(itemField), + Description: ParseStructFieldTag.GetParamDesc(itemField), } if ValidateRule.IsRequired(itemField) { 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 aa72e77..ff7cfca 100644 --- a/parser_test.go +++ b/parser_test.go @@ -26,8 +26,9 @@ type Meta struct { // Date : 17:55 2024/7/19 func Test_parser_Openapi3(t *testing.T) { type UserExt struct { - Job string `json:"job" dc:"job" binding:"required"` - Height string `json:"height" dc:"height" binding:"required"` + Job string `json:"job" dc:"job" binding:"required"` + JobPtr *string `json:"job_ptr" dc:"job_ptr" binding:"required"` + Height string `json:"height" dc:"height" binding:"required"` } type User struct { Meta `json:"-" deprecated:"false" path:"/user/detail" method:"POST" desc:"测试接口" tag:"用户,搜索" content_type:"application/json" output_content_type:"application/json"`