zoukankan      html  css  js  c++  java
  • Gin框架参数绑定

    Gin框架参数绑定

    参数绑定

    为了能够更方便的获取请求相关参数,提高开发效率,我们可以基于请求的Content-Type识别请求数据类型并利用反射机制自动提取请求中QueryStringform表单JSONXML等参数到结构体中。 下面的示例代码演示了.ShouldBind()强大的功能,它能够基于请求自动提取JSONform表单QueryString类型的数据,并把值绑定到指定的结构体对象。

    一、querystring方式

    package main
    
    import (
    	"fmt"
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    type UserInfo struct {
    	Username string `form:"username" json:"username"`
    	Password string `form:"password" json:"password"`
    }
    
    func main() {
    
    	r := gin.Default()
    	// querystring方式
    	r.GET("/user", func(c *gin.Context) {
    		//username := c.Query("username")
    		//password := c.Query("password")
    		//user := userInfo{
    		//	Username: username,
    		//	Password: password,
    		//}
    		// 数据绑定
    		var userBind UserInfo // 声明变量
    		
            // 通过反射获取数据
    		err := c.ShouldBind(&userBind)
    		if err != nil {
    			c.JSON(http.StatusBadRequest, gin.H{
    				"error": err.Error(),
    			})
    		} else {
    			fmt.Printf("%#v\n", userBind)
    		}
    
    		c.JSON(http.StatusOK, userBind)
    
    	})
    	r.Run(":9999")
    }
    
    

    image-20211117085340288

    二、form-data方式

    package main
    
    import (
    	"fmt"
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    type UserInfo struct {
    	Username string `form:"username" json:"username"`
    	Password string `form:"password" json:"password"`
    }
    
    func main() {
    
    	r := gin.Default()
    	// form方式
    	r.POST("/user", func(c *gin.Context) {
    
    		// 数据绑定
    		var userBind UserInfo // 声明变量
    
    		err := c.ShouldBind(&userBind)
    		if err != nil {
    			c.JSON(http.StatusBadRequest, gin.H{
    				"error": err.Error(),
    			})
    		} else {
    			fmt.Printf("%#v\n", userBind)
    		}
    
    		c.JSON(http.StatusOK, userBind)
    
    	})
    	r.Run(":9999")
    }
    
    

    image-20211117085920335

    三、json方式

    package main
    
    import (
    	"fmt"
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    type UserInfo struct {
    	Username string `form:"username" json:"username"`
    	Password string `form:"password" json:"password"`
    }
    
    func main() {
    
    	r := gin.Default()
    	// json方式
    	r.POST("/json", func(c *gin.Context) {
    
    		// 数据绑定
    		var userBind UserInfo // 声明变量
    
    		err := c.ShouldBind(&userBind)
    		if err != nil {
    			c.JSON(http.StatusBadRequest, gin.H{
    				"error": err.Error(),
    			})
    		} else {
    			fmt.Printf("%#v\n", userBind)
    		}
    
    		c.JSON(http.StatusOK, userBind)
    
    	})
    	r.Run(":9999")
    }
    
    

    image-20211117090036145

  • 相关阅读:
    数据库的存储过程、数据库设计范式、数据库关系
    谈谈窗体之间的数据交互
    hdu2141AC代码分享
    参考C++STL标准库中对了的使用方法
    背包类问题解答——poj3624分析
    ACM第一天研究懂的AC代码——BFS问题解答——习题zoj2165
    洛谷——P2483 [SDOI2010]魔法猪学院
    洛谷——P2822 组合数问题
    COGS——T 2739. 凯伦和咖啡
    洛谷—— P3225 [HNOI2012]矿场搭建
  • 原文地址:https://www.cnblogs.com/randysun/p/15626628.html
Copyright © 2011-2022 走看看