// Package parse_body ... // // Description : parse_body ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2024-10-22 16:43 package parse_body import ( "errors" "git.zhangdeman.cn/zhangdeman/gin/request/abstract" "github.com/gin-gonic/gin" "strings" ) var ( requestBodyParseAdaptorTable = map[string]abstract.RequestBodyParseAdaptor{} ) // Register 注册适配器实例 // // Author : go_developer@163.com<白茶清欢> // // Date : 16:45 2024/10/22 func Register(adaptor abstract.RequestBodyParseAdaptor) { if nil == adaptor { return } requestBodyParseAdaptorTable[adaptor.ContentType()] = adaptor } // Execute 解析请求BODY数据 func Execute(ctx *gin.Context, receiver any) ([]byte, error) { contentType := strings.ToLower(strings.ReplaceAll(ctx.ContentType(), " ", "")) // 裁剪出真实的类型,之所以截取,是因为 content_type 中可能还包含编码信息, 如 : application/json;charset=utf8 contentTypeArr := strings.Split(contentType, ";") contentType = contentTypeArr[0] if _, exist := requestBodyParseAdaptorTable[contentType]; !exist { return nil, errors.New(contentType + " : adaptor not found") } if parseResult, err := requestBodyParseAdaptorTable[contentType].Parse(ctx, receiver); nil != err { return nil, err } else { return parseResult, err } }