feat: 增加注册注入参数的方法
This commit is contained in:
25
router/common_param.go
Normal file
25
router/common_param.go
Normal file
@ -0,0 +1,25 @@
|
||||
// Package router ...
|
||||
//
|
||||
// Description : router ...
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 2025-10-30 15:39
|
||||
package router
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
|
||||
// GetCommonParam 获取公共参数
|
||||
type GetCommonParam func(ctx *gin.Context) (any, error)
|
||||
|
||||
// AddCommonParamRule 添加公共参数注入规则
|
||||
func (s *server) AddCommonParamRule(fieldName string, getParamFunc GetCommonParam) {
|
||||
s.commonParam[fieldName] = getParamFunc
|
||||
}
|
||||
|
||||
// AddCommonParamRules 批量添加公共参数注入规则
|
||||
func (s *server) AddCommonParamRules(rules map[string]GetCommonParam) {
|
||||
for fieldName, rule := range rules {
|
||||
s.AddCommonParamRule(fieldName, rule)
|
||||
}
|
||||
}
|
||||
@ -20,7 +20,7 @@ import (
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func getFormInitValue(ctx *gin.Context, uriCfg UriConfig) (any, error) {
|
||||
func (s *server) getFormInitValue(ctx *gin.Context, uriCfg UriConfig) (any, error) {
|
||||
var (
|
||||
formParam reflect.Value
|
||||
formValue any
|
||||
@ -43,7 +43,7 @@ func getFormInitValue(ctx *gin.Context, uriCfg UriConfig) (any, error) {
|
||||
}
|
||||
|
||||
// RequestHandler 获取请求处理方法
|
||||
func RequestHandler(uriCfg UriConfig) gin.HandlerFunc {
|
||||
func (s *server) RequestHandler(uriCfg UriConfig) gin.HandlerFunc {
|
||||
return func(ctx *gin.Context) {
|
||||
var (
|
||||
err error
|
||||
@ -52,7 +52,7 @@ func RequestHandler(uriCfg UriConfig) gin.HandlerFunc {
|
||||
formValue any
|
||||
)
|
||||
|
||||
if formValue, err = getFormInitValue(ctx, uriCfg); nil != err {
|
||||
if formValue, err = s.getFormInitValue(ctx, uriCfg); nil != err {
|
||||
e = exception.NewFromError(400, err)
|
||||
response.SendWithException(ctx, e, &define.ResponseOption{
|
||||
ContentType: consts.MimeTypeJson,
|
||||
|
||||
@ -11,6 +11,7 @@ import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"git.zhangdeman.cn/zhangdeman/graceful"
|
||||
|
||||
@ -129,14 +130,17 @@ func NewServer(port int, optionList ...SetServerOptionFunc) *server {
|
||||
uiInstance: apiDoc.NewSwaggerUI(option.serverInfo, option.serverList, apiDocEnum.SwaggerUITheme(option.swaggerUiTheme)),
|
||||
port: port,
|
||||
option: option,
|
||||
lock: &sync.RWMutex{},
|
||||
}
|
||||
}
|
||||
|
||||
type server struct {
|
||||
router *gin.Engine
|
||||
port int
|
||||
uiInstance *apiDoc.SwaggerUI
|
||||
option *serverOption
|
||||
router *gin.Engine
|
||||
port int
|
||||
uiInstance *apiDoc.SwaggerUI
|
||||
option *serverOption
|
||||
commonParam map[string]GetCommonParam // 结构体字段名, 注意, 不是TAG
|
||||
lock *sync.RWMutex
|
||||
}
|
||||
|
||||
// Start 启动服务
|
||||
@ -201,21 +205,22 @@ func (s *server) Group(routerPrefix string, middlewareList []gin.HandlerFunc, cL
|
||||
for _, itemUriCfg := range urlTable {
|
||||
_ = s.uiInstance.DocInstance().AddApiFromInAndOut(routerPrefix, itemUriCfg.FormDataType, itemUriCfg.ResultDataType)
|
||||
method := strings.ToUpper(itemUriCfg.RequestMethod)
|
||||
handleFunc := s.RequestHandler(itemUriCfg)
|
||||
switch method {
|
||||
case http.MethodGet:
|
||||
g.GET(itemUriCfg.Path, RequestHandler(itemUriCfg))
|
||||
g.GET(itemUriCfg.Path, handleFunc)
|
||||
case http.MethodHead:
|
||||
g.HEAD(itemUriCfg.Path, RequestHandler(itemUriCfg))
|
||||
g.HEAD(itemUriCfg.Path, handleFunc)
|
||||
case http.MethodPost:
|
||||
g.POST(itemUriCfg.Path, RequestHandler(itemUriCfg))
|
||||
g.POST(itemUriCfg.Path, handleFunc)
|
||||
case http.MethodPut:
|
||||
g.PUT(itemUriCfg.Path, RequestHandler(itemUriCfg))
|
||||
g.PUT(itemUriCfg.Path, handleFunc)
|
||||
case http.MethodPatch:
|
||||
g.PATCH(itemUriCfg.Path, RequestHandler(itemUriCfg))
|
||||
g.PATCH(itemUriCfg.Path, handleFunc)
|
||||
case http.MethodDelete:
|
||||
g.DELETE(itemUriCfg.Path, RequestHandler(itemUriCfg))
|
||||
g.DELETE(itemUriCfg.Path, handleFunc)
|
||||
case http.MethodOptions:
|
||||
g.OPTIONS(itemUriCfg.Path, RequestHandler(itemUriCfg))
|
||||
g.OPTIONS(itemUriCfg.Path, handleFunc)
|
||||
case http.MethodTrace:
|
||||
panic(`method Trace is not supported`)
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user