客户端传参,后端接收并解析到结构体
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
type Login struct {
// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}
func main() {
// 1.创建路由
// 默认使用了2个中间件Logger() ,Recovery()
r := gin.Default()
// JSON绑定
r.POST("/loginJSON", func(c *gin.Context) {
var json Login
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{"status":"304"})
return
}
c.JSON(http.StatusOK, gin.H{"status":200})
})
r.Run(":8000")
}
发送请求:
xujunkai@adeMacBook-Pro ~ % curl http://127.0.0.1:8000/loginJSON -H ‘content-type:application/json‘ -d {"user":"root","password":"admin"} -X POST
// 返回错误,因为发送数据没有进行json转换字符串:
{"error":"invalid character ‘u‘ looking for beginning of value"}
// 当发送数据类型json str 就可以了
xujunkai@adeMacBook-Pro ~ % curl http://127.0.0.1:8000/loginJSON -H ‘content-type:application/json‘ -d "{\"user\":\"root\",\"password\":\"admin\"}" -X POST
{"status":200}%
html片段
<body>
<form action="http://localhost:8000/loginForm" method="post" enctype="application/x-www-form-urlencoded">
用户名<input type="text" name="username"><br>
密码<input type="password" name="password">
<input type="submit" value="提交">
</form>
</body>
后端代码
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
type Login struct {
// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}
func main() {
// 1.创建路由
// 默认使用了2个中间件Logger() ,Recovery()
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 {
// 返回错误信息
// gin.H 封装了生成json数据的工具
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})
})
r.Run(":8000")
}
效果展示:

package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
type Login struct {
// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}
func main() {
// 1.创建路由
// 默认使用了2个中间件Logger() ,Recovery()
r := gin.Default()
// JSON绑定
r.GET("/:user/:password", func(c *gin.Context) {
var login Login
// 解析URL上面参数
if err := c.ShouldBindUri(&login); err!=nil {
// 返回错误信息
// gin.H 封装了生成json数据的工具
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})
})
r.Run(":8000")
}
http://127.0.0.1:8000/root/admin
原文:https://www.cnblogs.com/xujunkai/p/13341748.html