Golang Gin 请求参数绑定与多数据格式处理

您所在的位置:网站首页 js提交post请求并获取返回数据 Golang Gin 请求参数绑定与多数据格式处理

Golang Gin 请求参数绑定与多数据格式处理

2023-06-12 04:37| 来源: 网络整理| 查看: 265

之前学习了使用Gin框架的Engine的默认路由功能解析HTTP请求。现在我们来学习gin框架的参数绑定操作和请求结果返回格式。

处理POST请求时,使用context.PostForm或者context.DefaultPostForm获取客户端表单提交的数据。

像上述这种只有username和password两个字段的表单数据进行提交时,可以使用context.PostForm 和context.GetPostForm获取。

但是如果表单数据较多时,使用PostForm和GetPostForm一次获取一个表单数据,开发效率较慢。

在实际的开发过程当中,往往会面对非常复杂的业务逻辑,比如提交某个数据的时候,需要很多的字段,很多的属性,比如提交用户注册表单,需要用户名注册密码,身份证信息,手机号,昵称等等。如果还是使用上面这种方式获取字段属性,这样就显得效率有些低了。

Gin框架提供给开发者表单实体绑定的功能,可以将表单数据与结构体绑定。(其实也就是将表单提交的数据直接映射为结构体实体)

 

 

表单实体绑定

使用PostForm这种单个获取属性和字段的方式,代码量较多,需要一个一个属性进行获取。而表单数据的提交,往往对应着完整的数据结构体定义,其中对应着表单的输入项。gin框架提供了数据结构体和表单提交数据绑定的功能,提高表单数据获取的效率。如下所示:

以一个用户注册功能来进行讲解表单实体绑定操作。用户注册需要提交表单数据,假设注册时表单数据包含三项,分别为:username、phone和password。

创建了UserReglster结构体用于接收表单数据,通过tag标签的方式设置每个字段对应的form表单中的属性名,通过binding属于设置属性是否是必须。

结构体里面的属性对应我们提交表单里面的哪些字段?通过后面的tag标签来设定。这里面有form的属性,这个表示要对应到http请求当中表单当中的哪一个字段。

可以看到Username对应的是表单当中的username字段。

下面是三种表单实体绑定的方式,分别是get请求方式,其次是post请求方式。在post请求方式里面讲两种,其中一种是mutiform格式,其次是json格式。

(1)get请求表单数据提交和服务端具体结构体的定义相应绑定操作

package mainimport ("fmt""github.com/gin-gonic/gin""log" )func main() {engine := gin.Default()//http://localhost:8080/hello?name=lucas&class=软件工程engine.GET("/hello", func(c *gin.Context) {fmt.Println(c.FullPath())s := new(Student)if err := c.ShouldBindQuery(s); err != nil {log.Fatal(err.Error())return} else {fmt.Printf("%#v \n", s)}})engine.Run()}[GIN-debug] Listening and serving HTTP on :8080 /hello &main.Student{Name:"lucas", Class:"软件工程"} [GIN] 2023/04/27 - 16:23:18 | 200 | 521.7µs | 127.0.0.1 | GET "/hello?name=lucas&class=%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B"type Student struct {Name string `form:"name"`Class string `form:"class"` }

 (2)post请求shouldbind方法 表单提交

package mainimport ("fmt""github.com/gin-gonic/gin""log" )type Register struct {Username string `form:"username"`Phone string `form:"phone"`Password string `form:"password"` }func main() {engine := gin.Default()engine.POST("/register", func(c *gin.Context) {r := new(Register)if err := c.ShouldBind(r); err != nil {log.Fatal(err.Error())return} else {fmt.Printf("%#v", r)}})engine.Run() }[GIN-debug] POST /register --> main.main.func1 (3 handlers) [GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend yo &main.Register{Username:"lucas", Phone:"18270893704", Password:"kubernetes"}[GIN] 2023/04/27 - 19:42:34 | 200 | 1.3004ms |

(3)处理json格式的数据

目前很多的团队都是使用json格式来进行开发的,提交数据的时候是使用json格式提交,返回也是使用json格式进行返回。

提交时候注意:提交的数据类型和服务器端定义的结构体字段类型保持一致,否则会报错。

上面就是全部对客户端提交数据的解析过程



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3