76 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package request ...
 | |
| //
 | |
| // Description : request ...
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 2022-07-03 00:33
 | |
| package request
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"errors"
 | |
| 	"github.com/mcuadros/go-defaults"
 | |
| 	"io"
 | |
| 	"net/http"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/go-playground/validator/v10"
 | |
| 
 | |
| 	"git.zhangdeman.cn/zhangdeman/gin/define"
 | |
| 
 | |
| 	"github.com/gin-gonic/gin"
 | |
| )
 | |
| 
 | |
| // form 表单相关操作
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 00:51 2022/7/3
 | |
| type form struct {
 | |
| 	checkInstance *validator.Validate
 | |
| }
 | |
| 
 | |
| // Parse 解析请求表单
 | |
| //
 | |
| // Author : go_developer@163.com<白茶清欢>
 | |
| //
 | |
| // Date : 00:34 2022/7/3
 | |
| func (f *form) Parse(ctx *gin.Context, receiver interface{}) error {
 | |
| 	handleConfig := define.GetHttpHandleConfig()
 | |
| 	requestBody, _ := io.ReadAll(ctx.Request.Body)
 | |
| 	// 请求信息写入上下文
 | |
| 	ctx.Set(handleConfig.RecordRequestDataField, string(requestBody))
 | |
| 	// 因为请求体被读一遍之后就没了,重新赋值 requestBody
 | |
| 	ctx.Request.Body = io.NopCloser(bytes.NewReader(requestBody))
 | |
| 	method := strings.ToUpper(ctx.Request.Method)
 | |
| 	if method == http.MethodGet ||
 | |
| 		method == http.MethodPatch ||
 | |
| 		method == http.MethodTrace ||
 | |
| 		method == http.MethodConnect ||
 | |
| 		method == http.MethodOptions {
 | |
| 		if err := ctx.ShouldBindQuery(receiver); nil != err {
 | |
| 			return err
 | |
| 		}
 | |
| 	} else if method == http.MethodPost ||
 | |
| 		method == http.MethodPut ||
 | |
| 		method == http.MethodDelete {
 | |
| 		if ContentType.IsJson(ctx) {
 | |
| 			if err := ctx.ShouldBindJSON(receiver); nil != err {
 | |
| 				return err
 | |
| 			}
 | |
| 		} else if ContentType.IsFormURLEncoded(ctx) {
 | |
| 			if err := ctx.ShouldBind(receiver); nil != err {
 | |
| 				return err
 | |
| 			}
 | |
| 		} else {
 | |
| 			return errors.New(ctx.ContentType() + " is not support")
 | |
| 		}
 | |
| 	} else {
 | |
| 		return errors.New(method + " : request method is not support")
 | |
| 	}
 | |
| 	// 设置默认值
 | |
| 	defaults.SetDefaults(receiver)
 | |
| 	return nil
 | |
| }
 |