公共参数自动注入, 增加参数是否已赋值检测 #18
							
								
								
									
										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