gin是支持url中分号;和and号&两种参数分割符的,但当我们的post参数中包含分号时,gin通过ShouldBind获取参数时,就会被分号分割,导致值不完整。我们可以通过中间件,对分号进行url编码。同时,gin的Request.Body只能读取一次,我们也可以通过中间件函数在对参数url编码后,写回Body。

中间件函数:

func EscapeParams() gin.HandlerFunc  {
return func(ctx *gin.Context) {
data,err := ctx.GetRawData()
if err==nil{
safeStr := strings.ReplaceAll(string(data),";","%3B")
ctx.Request.Body = ioutil.NopCloser( strings.NewReader(safeStr) )
}
ctx.Next()
}
}

接口函数:

c.POST("/hello",EscapeParams(), func(context *gin.Context) {
context.JSON(200,gin.H{"status":1})
})