Golang实践录:gin绑定解析json的两种方法
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
type LoginRequest struct {
Username string `json:"username" binding:"required"`
Password string `json:"password" binding:"required"`
}
func main() {
router := gin.Default()
// 方法一:使用ShouldBindJSON绑定JSON数据
router.POST("/login1", func(c *gin.Context) {
var json LoginRequest
if err := c.ShouldBindJSON(&json); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"status": "You are logged in", "user": json.Username})
})
// 方法二:使用BindJSON绑定JSON数据,并进行验证
router.POST("/login2", func(c *gin.Context) {
var json LoginRequest
if err := c.BindJSON(&json); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid JSON request"})
return
}
if _, err := c.Get("username"); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Missing username field"})
return
}
if _, err := c.Get("password"); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Missing password field"})
return
}
c.JSON(http.StatusOK, gin.H{"status": "You are logged in", "user": json.Username})
})
router.Run(":8080")
}
这段代码定义了一个LoginRequest
结构体来接收JSON请求,并展示了两种在Gin框架中绑定和解析JSON的方法。第一种方法使用ShouldBindJSON
,它在绑定失败时会返回错误。第二种方法使用BindJSON
和自定义的验证逻辑,它会先尝试绑定JSON,然后检查必要字段是否存在。这两种方法都会在请求体不符合要求时返回错误信息,或在符合要求时返回登录状态和用户名。
评论已关闭