gin数据解析和绑定
json数据解析和绑定
客户端传参,后端接收到并解析到结构体
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 定义接收数据的结构体
type Login struct {
// banding:"required"修饰的字段,若接收为空格,则报错,是必须字段
User string `form:"username" json:"user" uri:"user" xml:"user" banding:"required"`
Password string `form:"password" json:"password" uri:"password" xml:"password" banding:"required"`
}
func main() {
// 1. 创建路由器
r := gin.Default()
// JSON绑定
r.POST("loginJSON",func(c *gin.Context){
// 声明接收的变量
var json Login
// 将request的body中的数据,自动按照json格式解析到结构体
if err:= c.ShouldBindJSON(&json);err!=nil{
// 返回错误信息
// gin.H封装了生成json数据的工具
c.JSON(http.StatusBadRequest,gin.H{"error":err.Error()})
return
}
// 判断用户名密码是否正确
if json.User != "root" || json.Password != "admin"{
c.JSON(http.StatusBadRequest,gin.H{"error":"304"})
return
}
c.JSON(http.StatusOK,gin.H{"status":"200"})
})
// 3.监听端口,默认8080
r.Run(":8000")
}
cmd测试
curl http://127.0.0.1:8000/loginJSON -H 'content-type:application/json' -d "{\"user\":\"root\",\"password\":\"admin\"}" -X POST
表单的数据解析和绑定
请求页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="http://127.0.0.1:8000/loginForm" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username">
<br>
密  码:<input type="password" name="password">
<input type="submit" value="登录">
</form>
</body>
</html>
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 定义接收数据的结构体
type Login struct {
// banding:"required"修饰的字段,若接收为空格,则报错,是必须字段
User string `form:"username" json:"user" uri:"user" xml:"user" banding:"required"`
Password string `form:"password" json:"password" uri:"password" xml:"password" banding:"required"`
}
func main() {
// 1. 创建路由器
r := gin.Default()
// JSON绑定
r.POST("loginForm",func(c *gin.Context){
// 声明接收的变量
var form Login
// Bind()默认解析丙绑定form格式
// 根据请求头中content-type自动推断
if err := c.Bind(&form);err != nil {
c.JSON(http.StatusBadRequest,gin.H{"error":err.Error()})
return
}
// 判断用户名密码是否正确
if form.User != "root" || form.Password != "admin" {
c.JSON(http.StatusBadRequest,gin.H{"status":"304"})
return
}
c.JSON(http.StatusOK,gin.H{"status":"200"})
})
// 3.监听端口,默认8080
r.Run(":8000")
}
结果.png
URI数据解析和绑定
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="http://127.0.0.1:8000/loginForm" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username">
<br>
密  码:<input type="password" name="password">
<input type="submit" value="登录">
</form>
</body>
</html>
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 定义接收数据的结构体
type Login struct {
// banding:"required"修饰的字段,若接收为空格,则报错,是必须字段
User string `form:"username" json:"user" uri:"user" xml:"user" banding:"required"`
Password string `form:"password" json:"password" uri:"password" xml:"password" banding:"required"`
}
func main() {
// 1. 创建路由器
r := gin.Default()
// JSON绑定
r.GET("/:user/:password",func(c *gin.Context){
// 声明接收的变量
var login Login
// Bind()默认解析丙绑定form格式
// 根据请求头中content-type自动推断
if err := c.ShouldBindUri(&login);err != nil {
c.JSON(http.StatusBadRequest,gin.H{"error":err.Error()})
return
}
// 判断用户名密码是否正确
if login.User != "root" || login.Password != "admin" {
c.JSON(http.StatusBadRequest,gin.H{"status":"304"})
return
}
c.JSON(http.StatusOK,gin.H{"status":"200"})
})
// 3.监听端口,默认8080
r.Run(":8000")
}
cmd测试
curl http://127.0.0.1:8000/root/admin