go Gin接受不同请求类型的请求参数

Gin中接受参数方法很多,不同类型的参数用不同的方法接口, 由于目前 前段请求参数问题, 使用Go完善了下接受参数方法, 支持接受 get postform json类型数据, 具体代码:


// 解析参数为map
func ParseRequestParam(c *gin.Context ) map[string]interface{} {

	urlMap := getUrlParam( c);
	fmt.Println( "UrlParam : ", urlMap )

	// 获取请求体中的JSON数据
	var jsonMap map[string]interface{}
	c.ShouldBind( &jsonMap )
	if c.Request.Method == "GET" && c.Request.Header.Get("Content-Type") == "application/json" {
		getRawData, _ := c.GetRawData()
		c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(getRawData))
		extJson := []byte(getRawData)
		var ext interface{}
		json.Unmarshal(extJson, &ext)
		jsonMap = ext.(map[string]interface{})
		Log("GET JSON DATA :", jsonMap)
	}
	// 获取PostForm参数
	formData := getPostFormParam( c );

	// 合并数据并返回
	alLReqData :=  MapMerge(formData , urlMap , jsonMap)

	return alLReqData
}

// 获取请求字符串
func MapMerge( maps ...map[string]interface{} ) map[string]interface{}{
	if len(maps) == 0 {
		return nil
	}
	allMap := make(map[string]interface{},0)
	for _, v := range maps {
		if len(allMap) == 0 {
			allMap = v
		}else{
			if len(v) > 0 {
				for mk, mv := range v {
					allMap[mk] = mv
				}
			}
		}
	}
	return allMap
}

// 获取请求字符串
func getPostFormParam(c *gin.Context) map[string]interface{}{
	var formMap = make(map[string]interface{},0)
	for k, v := range c.Request.PostForm {
		formMap[k] = arrayToString(v)
	}
	return formMap;
}
// 获取请求字符串
func getUrlParam(c *gin.Context) map[string]interface{}{
	route := c.FullPath()
	fullPath := fmt.Sprintf("%v",c.Request.URL)
	// 路由和路径相同返回空
	if route == fullPath {
		return nil
	}
	// 拼接一个? 解析出URL参数
	if strings.LastIndex(route , "?" ) < 0 {
		route += "?"
	}
	replace := strings.Replace(fullPath, route, "", 1 )
	urlParam,_:= url.ParseQuery(replace)
	// 解析参数为map格式
	var urlMap = make(map[string]interface{},0)
	for k,v := range urlParam{
		urlMap[k] = arrayToString(v)
	}
	return urlMap
}

// 数组类型slice转换为 string
func arrayToString(arr []string) string {
	var result string
	for _, i := range arr {  //遍历数组中所有元素追加成string
		result += i
	}
	return result
}

自己简单测试了下 ,有问题继续改进

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇葩也是花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值