在POST请求中,常用的除了FormData,json格式可能更常用;
FromData可以使用DefaultPostForm来实现;
如何接受来自前端json格式请求?
注:前端的请求headers中Content-Type: application/json
下面具体实现:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
router := gin.Default()
// 定义一个结构体
// 结构用 type 关键字定义
// 结构体包含一个或多个【字段】
// 每个字段都有一个【名字】和【类型】
// 1. `Name`:字段名,表示结构体中的一个字段。
// 2. `string`:字段类型,表示该字段的数据类型是字符串。
// 3. `json:"name"`:标签(tag),用于在 JSON 编码和解码时指定字段名。
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
router.POST("user", func(c *gin.Context) {
var user User
// c.BindJSON是接受json的关键,用于将 HTTP 请求中的 JSON 数据解析并绑定到指定的结构体变量 `user` 中。
// &user是一个指针引用,会直接修改👆申明的user变量;
// c.BindJSON 会返回一个错误(如果有)
if err := c.BindJSON(&user); err != nil {
c.JSONP(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
c.JSONP(http.StatusOK, user)
})
router.Run(":8080") // 监听并在 0.0.0.0:8080 上启动服务
}
几个关键
- 定义一个
结构体 - 创建一个
结构体变量 - 在路由中使用
c.BindJSON(&结构体变量)将请求中的JOSN数据解析并绑定到指定的结构体变量中 - (使用user)
ApiFox请求
额外-设置某个字段是必须的
type User struct {
Name string `json:"name" binding:"required"`
Age int `json:"age"`
}
Name string `json:"name" binding:"required"`
binding:"required"就可以了