不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

Gin框架数据绑定和验证

数据绑定介绍

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"`

}

// 注意:structTag:指定字段名称,不用使用首字母大写的


// 绑定
var user User
context.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
// 结构体中structTag的form起作用



var user User
context.ShouldBind(&user)
fmt.Println(user)


访问:http://127.0.0.1:8080/tobind?name=zhiliao&age=110

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
// 结构体中structTag的json起作用



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等函数只绑定对应格式的参数

------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!