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

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++ {
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)

View File

@ -27,6 +27,7 @@ type Meta struct {
func Test_parser_Openapi3(t *testing.T) {
type UserExt struct {
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 {