这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
本文将记录Gin框架的数据解析的一些知识
其中测试,我使用Postman进行
首先请看代码结构
main中存放主函数,models存放了几个结构体,类似于Java开发中的实体类,routers下存放两个路由
models.User代码如下
package models
type User1 struct {
UserName string `form:"userName" json:"userName"`
UserPassword string `form:"userPassword" json:"userPassword"`
}
models.Info代码如下
package models
type Info struct {
Info string `form:"info"`
}
注意 请在结构体上标明必要的form等等,否则有可能无法使用Gin的许多方法或出现某些问题 但是经过我实际测量,有时不加也是可以正常运行的...不知为什么
routers.r1代码如下
package routers
import (
"Gin3/models"
"fmt"
"github.com/gin-gonic/gin"
)
func getUser(ctx *gin.Context) {
var userJSON models.User1
//Bind用来匹配(以Postman为例)form-data、x-www-form-urlencoded类型,请注意参数为地址否则会报错!
err := ctx.Bind(&userJSON)
if err != nil {
fmt.Printf("POST ERROR %t\n", err)
return
}
fmt.Println(userJSON)
}
func LoadR1(engine *gin.Engine) {
engine.POST("/r1", getUser)
}
测试使用Postman,使用这两项:form-data 与x-www-form-urlencoded均可,在其中输入代码值即可
routers.r2代码如下
package routers
import (
"Gin3/models"
"fmt"
"github.com/gin-gonic/gin"
)
/**
type Info struct {
Info string
}
*/
func getInfo(ctx *gin.Context) {
var info models.Info
err := ctx.ShouldBindJSON(&info)
if err != nil {
fmt.Printf("POST ERROR %t\n", err)
return
}
fmt.Println(info.Info)
}
func LoadR2(engine *gin.Engine) {
engine.POST("/r2", getInfo)
}
此时使用ShouldBindJSON方法解析JSON对象,在Postman测试时如图:
结果如下:
可见成功打印111
请不要忘记Headers中进行配置,当然默认是配置好的...
- 在进行多个JSON对象解析时请使用
ShouldBindBodyWith方法 ShouldBindUri用来解析URL
补充 main函数
package main
import (
"Gin3/routers"
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
route := gin.Default()
routers.LoadR1(route)
routers.LoadR2(route)
err := route.Run(":80")
if err != nil {
fmt.Println("ERROR")
return
}
}