修复数组指针解析的BUG #4

Merged
zhangdeman merged 2 commits from feature/fix_nested_model into master 2025-02-15 13:13:36 +08:00
2 changed files with 19 additions and 15 deletions

View File

@ -547,6 +547,9 @@ func (g *Generate) parseSliceItem(rootSchemaName string, inputType reflect.Type)
}
sliceValue := reflect.MakeSlice(inputType, 1, 1)
sliceItemType := sliceValue.Index(0).Type()
if sliceItemType.Kind() == reflect.Ptr {
sliceItemType = sliceItemType.Elem()
}
g.AddComponentsSchema(rootSchemaName, sliceItemType.PkgPath(), sliceItemType)
if len(sliceItemType.PkgPath()) == 0 {
return sliceItemType.String()
@ -563,6 +566,7 @@ func (g *Generate) getSchemaRef(schemaName string) string {
if "" == schemaName {
return ""
}
schemaName = strings.ReplaceAll(schemaName, "*", "") // 去除指针类型 *
return "#/components/schemas/" + strings.ReplaceAll(schemaName, "/", "-")
}

View File

@ -27,8 +27,8 @@ type Meta struct {
func Test_parser_Openapi3(t *testing.T) {
type User struct {
Meta `json:"-" deprecated:"false" path:"/user/detail" method:"POST" desc:"测试接口" tag:"用户,搜索" content_type:"application/json" output_content_type:"application/json"`
Name string `json:"name" d:"zhang" desc:"用户姓名" binding:"required"`
Age string `json:"age" d:"18" desc:"年龄" binding:"required,oneof=12 13 18 90"`
Name *string `json:"name" d:"zhang" desc:"用户姓名" binding:"required"`
Age string `json:"age" d:"18" desc:"年龄" binding:"required,oneof=12 13 18 90"`
}
type UserDelete struct {
Meta `json:"-" deprecated:"false" path:"/user/detail" method:"DELETE" desc:"测试接口" tag:"用户,搜索" content_type:"application/json" output_content_type:"application/json"`
@ -51,15 +51,15 @@ func Test_parser_Openapi3(t *testing.T) {
Age string `json:"age" d:"18" desc:"年龄" binding:"required,oneof=12 13 18 90"`
}
type List struct {
Total int64 `json:"total" binding:"required"`
UserList []User `json:"user_list"`
Total int64 `json:"total" binding:"required"`
UserList []*User `json:"user_list"`
}
var o List
var f User
var fd UserDelete
var up UserPut
var ug UserGet
var uh UserHead
var o *List
var f *User
var fd *UserDelete
var up *UserPut
var ug *UserGet
var uh *UserHead
g := NewOpenapiDoc(nil, []*define.ServerItem{
&define.ServerItem{
Url: "http://127.0.0.1/v1",
@ -78,11 +78,11 @@ func Test_parser_Openapi3(t *testing.T) {
Variables: nil,
},
})
g.AddApiFromInAndOut(reflect.TypeOf(f), reflect.TypeOf(o))
g.AddApiFromInAndOut(reflect.TypeOf(fd), reflect.TypeOf(o))
g.AddApiFromInAndOut(reflect.TypeOf(up), reflect.TypeOf(o))
g.AddApiFromInAndOut(reflect.TypeOf(ug), reflect.TypeOf(o))
g.AddApiFromInAndOut(reflect.TypeOf(uh), reflect.TypeOf(o))
g.AddApiFromInAndOut("", reflect.TypeOf(f), reflect.TypeOf(o))
g.AddApiFromInAndOut("", reflect.TypeOf(fd), reflect.TypeOf(o))
g.AddApiFromInAndOut("", reflect.TypeOf(up), reflect.TypeOf(o))
g.AddApiFromInAndOut("", reflect.TypeOf(ug), reflect.TypeOf(o))
g.AddApiFromInAndOut("", reflect.TypeOf(uh), reflect.TypeOf(o))
byteData, _ := json.Marshal(g.docData)
fmt.Println(string(byteData))
}