diff --git a/generate.go b/generate.go index 235cb54..58821e2 100644 --- a/generate.go +++ b/generate.go @@ -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, "/", "-") } diff --git a/parser_test.go b/parser_test.go index 93348dd..a33b373 100644 --- a/parser_test.go +++ b/parser_test.go @@ -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)) }