golang macaron各种形式入参封装

func HandleResp (ctx *gin.Context, apiInfo models.ApiInfo) error{
	var buf bytes.Buffer
	reqbody,err := ioutil.ReadAll(ctx.Request.Body)

	//fmt.Println("ctx.Params: ",ctx.Params)
	//fmt.Println("reqbody: ",string(reqbody))
	//fmt.Println("ctx.Request.Header: ",ctx.Request.Header)
	//fmt.Println("ctx.Request.PostForm: ",ctx.Request.PostForm)
	//fmt.Println("ctx.Request.URL.Query(): ",ctx.Request.URL.Query())

	//HEADER数据结构转换成map
	headMap := make(map[string] string)
	for k,v := range ctx.Request.Header {
		headMap[k] = strings.Join(v,",")
	}

	//转换reqbody
	jsonMap := make(map[string]interface{})
	formMap := make(map[string]interface{})
	if strings.ToLower(headMap["Content-Type"]) == "application/json" {
		err = json.Unmarshal(reqbody, &jsonMap)
		if err != nil {
			return err
		}
	}else if strings.ToLower(headMap["Content-Type"]) == "application/x-www-form-urlencoded" {
		formList := strings.Split(string(reqbody),"&")
		for _,formItem := range formList {
			if formItem == "" {
				continue
			}
			formItemList := strings.Split(formItem,"=")
			formkey,_ := url.QueryUnescape(formItemList[0])
			formValue,_ := url.QueryUnescape(formItemList[1])
			formMap[formkey] = formValue
		}
	}
	//转换ctx.Request.URL.Query()
	queryMap := make(map[string]interface{})
	for k1,v1 := range ctx.Request.URL.Query() {
		queryMap[k1] = strings.Join(v1,",")
	}
	//转换path
	pathMap := make(map[string]interface{})
	for _,paramItem := range ctx.Params {
		pathMap[paramItem.Key] = paramItem.Value
	}

	if int64(apiInfo.SuccPercents) > rand.Int63n(100) {
		ctx.Status(apiInfo.SuccStatusCode)
		tmplSucc,err := template.New("succdata").Parse(apiInfo.SuccData)
		if err != nil {
			return err
		}

		err = tmplSucc.Execute(&buf, map[string] interface{}{
			"Header": headMap,
			"Query": queryMap,
			"Path": pathMap,
			"JsonBody": jsonMap,
			"FormBody": formMap,
		})
		if err != nil {
			return err
		}
		respBody := buf.String()
		respMap := make(map[string]interface{})
		err = json.Unmarshal([]byte(respBody),&respMap)
		if err != nil {
			ctx.String(apiInfo.SuccStatusCode,respBody)
		}else {
			ctx.JSON(apiInfo.SuccStatusCode,respMap)
		}
	} else {
	//	失败时返回
		ctx.Status(apiInfo.FailStatusCode)
		tmplFail,err := template.New("succdata").Parse(apiInfo.FailData)
		if err != nil {
			return err
		}

		err = tmplFail.Execute(&buf, map[string] interface{}{
			"Header": headMap,
			"Query": queryMap,
			"Path": pathMap,
			"JsonBody": jsonMap,
			"FormBody": formMap,
		})
		if err != nil {
			return err
		}
		respBody := buf.String()
		respMap := make(map[string]interface{})
		err1 := json.Unmarshal([]byte(respBody),&respMap)
		if err1 != nil {
			ctx.String(apiInfo.FailStatusCode,respBody)
		}else {
			ctx.JSON(apiInfo.FailStatusCode,respMap)
		}

	}
	return nil
}

  

猜你喜欢

转载自www.cnblogs.com/zipon/p/13366813.html
今日推荐