Gin把傳入的請求payload JSON轉為struct。
範例環境:
- Go 1.16
- Gin 1.7.2
範例
Department
及Employee
為JSON要轉成的struct。
model/department.go
package model
type Department struct {
Id int `json:"id"`
Name string `json:"name"`
Employees []Employee `json:"employees"`
}
model/employee.go
package model
type Employee struct {
Id int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
以gin.Context.Bind()
把struct的指標變數傳入接收轉換的JSON資料。
main.go
package main
import (
"fmt"
"abc.com/demo/model"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.POST("/employee", demoHandler)
router.Run(":8080")
}
func demoHandler(c *gin.Context) {
var dep model.Department
err := c.Bind(&dep)
if err != nil {
return
}
fmt.Printf("%v\n", dep)
c.JSON(200, "success")
}
測試
在命令列以cURL傳入JSON如下。
curl -X POST "http://localhost:8080/employee" \
-H 'content-type: application/json' \
-d '{"id": 100, "name": "HR", "employees": [{"id": 1, "name": "John", "age": 33}, {"id": 2, "name": "Mary", "age": 28}]}'
執行後會在console印出轉換後的struct變數dep
內容。
{100 HR [{1 John 33} {2 Mary 28}]}
Bind()
是依照Content-Type
為application/json
判斷傳入的payload為JSON格式,或是直接用BindJSON()
指定傳入的payload為JSON格式。
此外也可用ShouldBind()
或ShouldBindJSON()
來轉換,差別在於Bind()
及BindJSON()
若解析JSON錯誤會把Response Header設為400。
沒有留言:
張貼留言