数据绑定介绍 Gin提供了两类绑定方法:
Must bind
Methods: Bind,BindJSON,BindXML,BindQuery,BindYAML
这些方法属于MustBindWith的具体调用。 如果发生绑定错误,则请求终止,并触发 c.AbortWithError(400, err).SetType(ErrorTypeBind) 。响应状态码被设置为 400 并且Content-Type被设置为text/plain; charset=utf-8 。 如果您在此之后尝试设置响应状态码,Gin会输出日志[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 400 with 422 。 如果您希望更好地控制绑定,考虑使用ShouldBind等效方法。
Should bind
Methods: ShouldBind,ShouldBindJSON,ShouldBindXML,ShouldBindQuery,ShouldBindYAML
这些方法属于ShouldBindWith的具体调用。 如果发生绑定错误,Gin 会返回错误并由开发者处理错误和请求。
数据绑定-Should bind 可以绑定Form、QueryString、Json,uri form标签:Form、QueryString json标签:Json uri标签:uri
form的绑定示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 type User struct { Id int `form:"id" json:"id"` Name string `form:"name" json:"name"` } var user Usercontext.ShouldBind(&user) fmt.Println(user) <form action="/dobind" method="post" > <input type ="text" name="name" ><br> <input type ="text" name="age" ><br> <input type ="submit" value="提交" > </form>
QueryString的绑定示例代码:
1 2 3 4 5 6 7 8 9 10 var user Usercontext.ShouldBind(&user) fmt.Println(user) 访问:http:
json的绑定示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 func DoBind (context *gin.Context) { var user User context.ShouldBind(&user) fmt.Println(user) context.JSON(200 ,gin.H{ "msg" :"success" , "code" :200 , }) } 前端:ajax <form> <input type ="text" name="name" id="name" ><br> <input type ="text" name="age" id="age" ><br> <input type ="button" value="提交" id="btn_add" > </form> <script> var btn_add = document.getElementById("btn_add" ); btn_add.onclick = function (ev) { var name = document.getElementById("name" ).value; var age = document.getElementById("age" ).value; $.ajax({ url:"/dobind" , type :"POST" , contentType: "application/json; charset=utf-8" , dataType: "json" , data:JSON.stringify({ "name" :name, "age" :Number(age) }), success:function (data) { console.log(data); }, fail:function (data) { console.log(data); } }) } </script>
注意: contentType: “application/json; charset=utf-8”, dataType: “json”, “age”:Number(age) age是个int类型,必须得转成int类型才可以直接绑定
数据绑定–Must bind Bind 可以绑定Form、QueryString、Json等
和ShouldBind的区别在于,ShouldBind没有绑定成功不报错,就是空值,Bind会报错
BindQuery等 BindJSON,BindXML,BindQuery,BindYAML等函数只绑定对应格式的参数