可以使用结构体来定义请求参数,在定义结构体时,可以使用 json
标签来指定该字段在请求中对应的名称。
例如,假设需要接收以下三种不同类型的参数:
- 用户注册请求参数
{
"username": "user1",
"password": "123456",
"email": "user1@example.com"
}
- 商品添加请求参数
{
"name": "product1",
"price": 10.99,
"description": "product description"
}
- 订单创建请求参数
{
"products": [
{
"id": 1,
"quantity": 2
},
{
"id": 2,
"quantity": 1
}
],
"address": "user address"
}
我们可以定义如下结构体:
type UserRegisterRequest struct {
Username string `json:"username"`
Password string `json:"password"`
Email string `json:"email"`
}
type ProductAddRequest struct {
Name string `json:"name"`
Price float64 `json:"price"`
Description string `json:"description"`
}
type OrderCreateRequest struct {
Products []struct {
ID int `json:"id"`
Quantity int `json:"quantity"`
} `json:"products"`
Address string `json:"address"`
}
然后,在处理POST请求时,可以根据不同的请求类型,解析不同的结构体。例如:
func handleUserRegister(c *gin.Context) {
var req UserRegisterRequest
err := c.BindJSON(&req)
if err != nil {
// 处理错误
return
}
// 处理用户注册逻辑
}
func handleProductAdd(c *gin.Context) {
var req ProductAddRequest
err := c.BindJSON(&req)
if err != nil {
// 处理错误
return
}
// 处理商品添加逻辑
}
func handleOrderCreate(c *gin.Context) {
var req OrderCreateRequest
err := c.BindJSON(&req)
if err != nil {
// 处理错误
return
}
// 处理订单创建逻辑
}