修复URL注册BUG
This commit is contained in:
parent
99df73e50e
commit
c3df76e94d
@ -9,6 +9,7 @@ package router
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// controller 解析controller有哪些方法要注册为接口
|
// controller 解析controller有哪些方法要注册为接口
|
||||||
@ -91,7 +92,7 @@ func (c controller) methodConfig(reflectMethod reflect.Method) (cfg UriConfig, n
|
|||||||
formType = methodType.In(2).Elem()
|
formType = methodType.In(2).Elem()
|
||||||
}
|
}
|
||||||
cfg.FormDataType = formType
|
cfg.FormDataType = formType
|
||||||
_, metaFieldExist := formType.FieldByName(FieldNameMeta)
|
metaField, metaFieldExist := formType.FieldByName(FieldNameMeta)
|
||||||
if !metaFieldExist {
|
if !metaFieldExist {
|
||||||
needRegister = false
|
needRegister = false
|
||||||
return
|
return
|
||||||
@ -116,6 +117,23 @@ func (c controller) methodConfig(reflectMethod reflect.Method) (cfg UriConfig, n
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 解析meta信息
|
||||||
|
cfg.Path = metaField.Tag.Get(TagNamePath)
|
||||||
|
cfg.RequestMethod = metaField.Tag.Get(TagNameMethod)
|
||||||
|
cfg.Desc = metaField.Tag.Get(TagNameDesc)
|
||||||
|
cfg.TagList = strings.Split(metaField.Tag.Get(TagNameUriTag), ",")
|
||||||
|
// 解析第一个返回值, 要求必须是结构体或者是map
|
||||||
|
outputStrictModel := metaField.Tag.Get(TagNameOutputStrict)
|
||||||
|
cfg.OutputStrict = outputStrictModel == "1" || outputStrictModel == "true"
|
||||||
|
if cfg.OutputStrict {
|
||||||
|
// 开启输出严格模式校验
|
||||||
|
if methodType.Out(0).Kind() != reflect.Struct && methodType.Out(0).Kind() != reflect.Map {
|
||||||
|
panic(cfg.Path + " : 接口配置输出严格校验, 输出数据类型必须为 struct 或 *struct 或 map, 实际返回数据类型 : " + methodType.Out(0).Kind().String())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 解析参数配置
|
||||||
|
//cfg.ParamList = c.parseParamConfig(formType)
|
||||||
cfg.ApiLogicFunc = reflectMethod
|
cfg.ApiLogicFunc = reflectMethod
|
||||||
needRegister = true
|
needRegister = true
|
||||||
return
|
return
|
||||||
|
@ -10,18 +10,18 @@ package router
|
|||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
api_doc "git.zhangdeman.cn/gateway/api-doc"
|
apiDoc "git.zhangdeman.cn/gateway/api-doc"
|
||||||
"git.zhangdeman.cn/gateway/api-doc/define"
|
"git.zhangdeman.cn/gateway/api-doc/define"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewDoc(info *define.Info, servers []*define.ServerItem) *Doc {
|
func NewDoc(info *define.Info, servers []*define.ServerItem) *Doc {
|
||||||
return &Doc{
|
return &Doc{
|
||||||
instance: api_doc.NewOpenapiDoc(info, servers),
|
instance: apiDoc.NewOpenapiDoc(info, servers),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type Doc struct {
|
type Doc struct {
|
||||||
instance *api_doc.Generate
|
instance *apiDoc.Generate
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add 增加接口文档测试
|
// Add 增加接口文档测试
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
package router
|
package router
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@ -46,7 +44,5 @@ func Test_parseController(t *testing.T) {
|
|||||||
SetValidateErrTag("err_msg")
|
SetValidateErrTag("err_msg")
|
||||||
s := NewServer(8080, nil)
|
s := NewServer(8080, nil)
|
||||||
s.Group("test", nil, TestController{})
|
s.Group("test", nil, TestController{})
|
||||||
byteData, _ := json.Marshal(s.docInstance.Data())
|
|
||||||
fmt.Println(string(byteData))
|
|
||||||
s.Start()
|
s.Start()
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,9 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"git.zhangdeman.cn/zhangdeman/consts"
|
||||||
|
|
||||||
|
apiDocDefine "git.zhangdeman.cn/gateway/api-doc/define"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -25,9 +28,14 @@ func NewServer(port int, option any) *server {
|
|||||||
panic("port should be greater than 80")
|
panic("port should be greater than 80")
|
||||||
}
|
}
|
||||||
return &server{
|
return &server{
|
||||||
router: gin.Default(),
|
router: gin.Default(),
|
||||||
docInstance: NewDoc(nil, nil), // TODO : 配置相关信息
|
docInstance: NewDoc(nil, []*apiDocDefine.ServerItem{
|
||||||
port: port,
|
{
|
||||||
|
Url: fmt.Sprintf("http://127.0.0.1:%d", port),
|
||||||
|
Description: "测试服务器",
|
||||||
|
},
|
||||||
|
}), // TODO : 配置相关信息
|
||||||
|
port: port,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,6 +87,8 @@ func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cL
|
|||||||
g.OPTIONS(itemUriCfg.Path, RequestHandler(itemUriCfg))
|
g.OPTIONS(itemUriCfg.Path, RequestHandler(itemUriCfg))
|
||||||
case http.MethodTrace:
|
case http.MethodTrace:
|
||||||
panic(`method Trace is not supported`)
|
panic(`method Trace is not supported`)
|
||||||
|
default:
|
||||||
|
panic("method " + itemUriCfg.RequestMethod + " is not support")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,11 +103,22 @@ func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cL
|
|||||||
// Date : 21:45 2025/2/15
|
// Date : 21:45 2025/2/15
|
||||||
func (s *server) SwaggerUI() {
|
func (s *server) SwaggerUI() {
|
||||||
swaggerInstance := NewSwaggerUI(s.docInstance, SwaggerUIThemeDefault)
|
swaggerInstance := NewSwaggerUI(s.docInstance, SwaggerUIThemeDefault)
|
||||||
// 默认swagger
|
s.router.GET("/doc/swagger/*any", func(ctx *gin.Context) {
|
||||||
s.router.GET("/swagger/*any", func(ctx *gin.Context) {
|
if ctx.Request.RequestURI == "/doc/swagger/doc.json" {
|
||||||
if ctx.Request.RequestURI == "/swagger/doc.json" {
|
// 默认swagger, 通过此接口读取文档数据
|
||||||
ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data())
|
ctx.JSON(http.StatusOK, swaggerInstance.docInstance.Data())
|
||||||
ctx.Abort()
|
ctx.Abort()
|
||||||
}
|
}
|
||||||
}, swaggerInstance.HandleSwaggerUI())
|
if ctx.Request.RequestURI == "/doc/swagger/openapi.json" {
|
||||||
|
// knife4go 文档通过此接口读取文档列表
|
||||||
|
ctx.JSON(http.StatusOK, []map[string]any{
|
||||||
|
{
|
||||||
|
"name": "服务文档",
|
||||||
|
"url": "doc.json",
|
||||||
|
"swaggerVersion": consts.SwaggerDocVersion3,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
ctx.Abort()
|
||||||
|
}
|
||||||
|
}, swaggerInstance.Handler())
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user