修复匿名字段中基础数据类型指针解析错误问题

This commit is contained in:
白茶清欢 2025-02-18 12:36:41 +08:00
parent d407826f88
commit 4e54b5fe33
2 changed files with 12 additions and 11 deletions

View File

@ -606,23 +606,23 @@ func (g *Generate) handleAnonymousField(schemaName string, field reflect.StructF
} }
for i := 0; i < handleType.NumField(); i++ { for i := 0; i < handleType.NumField(); i++ {
if handleType.Field(i).Anonymous { if handleType.Field(i).Anonymous {
// 地柜处理多层嵌套匿名字段 // 递归处理多层嵌套匿名字段
g.handleAnonymousField(schemaName, handleType.Field(i)) g.handleAnonymousField(schemaName, handleType.Field(i))
continue continue
} else { } else {
itemField := handleType.Field(i) 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 { baseConvertType, isBaseType := g.realBaseType2SwaggerType(itemField.Type.String())
g.AddComponentsSchema(schemaName, handleType.Field(i).Type.PkgPath(), handleType.Field(i).Type) if !isBaseType {
g.AddComponentsSchema(schemaName, itemField.Type.PkgPath(), itemField.Type)
continue continue
} else { } else {
convertBaseType, _ := g.realBaseType2SwaggerType(handleType.Field(i).Type.String())
paramName := ParseStructFieldTag.GetParamName(itemField) paramName := ParseStructFieldTag.GetParamName(itemField)
g.docData.Components.Schemas[schemaName].Properties[paramName] = &define.Property{ g.docData.Components.Schemas[schemaName].Properties[paramName] = &define.Property{
Type: convertBaseType, Type: baseConvertType,
Format: handleType.Field(i).Type.String(), Format: itemField.Type.String(),
Enum: ValidateRule.Enum(handleType.Field(i)), Enum: ValidateRule.Enum(itemField),
Default: ParseStructFieldTag.GetDefaultValue(handleType.Field(i)), Default: ParseStructFieldTag.GetDefaultValue(itemField),
Description: ParseStructFieldTag.GetParamDesc(handleType.Field(i)), Description: ParseStructFieldTag.GetParamDesc(itemField),
} }
if ValidateRule.IsRequired(itemField) { if ValidateRule.IsRequired(itemField) {
g.docData.Components.Schemas[schemaName].Required = append(g.docData.Components.Schemas[schemaName].Required, paramName) g.docData.Components.Schemas[schemaName].Required = append(g.docData.Components.Schemas[schemaName].Required, paramName)

View File

@ -27,6 +27,7 @@ type Meta struct {
func Test_parser_Openapi3(t *testing.T) { func Test_parser_Openapi3(t *testing.T) {
type UserExt struct { type UserExt struct {
Job string `json:"job" dc:"job" 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"` Height string `json:"height" dc:"height" binding:"required"`
} }
type User struct { type User struct {