zoukankan      html  css  js  c++  java
  • Go语言Gin-2.数据传输

    3.gin数据解析和 绑定

    3.1 Json 数据解析和绑定

    • 客户端传参,后端接收并解析到结构体

      package main
      
      import (
      	"github.com/gin-gonic/gin"
      	"net/http"
      )
      
      type Login struct {
      	// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
      	User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
      	Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
      }
      
      func main() {
      	// 1.创建路由
      	// 默认使用了2个中间件Logger() ,Recovery()
      	r := gin.Default()
      	// JSON绑定
      	r.POST("/loginJSON", func(c *gin.Context) {
      		var json Login
      		if err := c.ShouldBindJSON(&json); err!=nil {
      			// 返回错误信息
      			// gin.H 封装了生成json数据的工具
      			c.JSON(http.StatusBadRequest, gin.H{"error":err.Error()})
      			return
      		}
      		// 判断用户名和密码是否正确
      		if json.User != "root" || json.Password != "admin" {
      			c.JSON(http.StatusBadRequest, gin.H{"status":"304"})
      			return
      		}
      		c.JSON(http.StatusOK, gin.H{"status":200})
      	})
      	r.Run(":8000")
      }
      
    • 发送请求:

      xujunkai@adeMacBook-Pro ~ % curl http://127.0.0.1:8000/loginJSON -H 'content-type:application/json' -d {"user":"root","password":"admin"} -X POST         
      // 返回错误,因为发送数据没有进行json转换字符串:
      {"error":"invalid character 'u' looking for beginning of value"}
      // 当发送数据类型json str 就可以了
      xujunkai@adeMacBook-Pro ~ % curl http://127.0.0.1:8000/loginJSON -H 'content-type:application/json' -d "{"user":"root","password":"admin"}" -X POST
      {"status":200}% 
      

    3.2表单数据解析和绑定

    • html片段

      <body>
          <form action="http://localhost:8000/loginForm" method="post" enctype="application/x-www-form-urlencoded">
              用户名<input type="text" name="username"><br>
              密码<input type="password" name="password">
              <input type="submit" value="提交">
          </form>
      </body>
      
    • 后端代码

      package main
      
      import (
      	"github.com/gin-gonic/gin"
      	"net/http"
      )
      
      type Login struct {
      	// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
      	User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
      	Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
      }
      
      func main() {
      	// 1.创建路由
      	// 默认使用了2个中间件Logger() ,Recovery()
      	r := gin.Default()
      	// JSON绑定
      	r.POST("/loginForm", func(c *gin.Context) {
      		var form Login
      		// Bind() 默认解析并绑定form格式
      		// 根据请求头content_type自动推断
      		if err := c.Bind(&form); err!=nil {
      			// 返回错误信息
      			// gin.H 封装了生成json数据的工具
      			c.JSON(http.StatusBadRequest, gin.H{"error":err.Error()})
      			return
      		}
      		// 判断用户名和密码是否正确
      		if form.User != "root" || form.Password != "admin" {
      			c.JSON(http.StatusBadRequest, gin.H{"status":"304"})
      			return
      		}
      		c.JSON(http.StatusOK, gin.H{"status":200})
      	})
      	r.Run(":8000")
      }
      

      效果展示:

      ![43099DE2-AAA8-4E0A-952E-C465C6C50C68](/Users/xujunkai/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/Users/874524334/QQ/Temp.db/43099DE2-AAA8-4E0A-952E-C465C6C50C68.png)

    3.3URL数据解析和绑定

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    type Login struct {
    	// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
    	User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
    	Password string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
    }
    
    func main() {
    	// 1.创建路由
    	// 默认使用了2个中间件Logger() ,Recovery()
    	r := gin.Default()
    	// JSON绑定
    	r.GET("/:user/:password", func(c *gin.Context) {
    		var login Login
    		// 解析URL上面参数
    		if err := c.ShouldBindUri(&login); err!=nil {
    			// 返回错误信息
    			// gin.H 封装了生成json数据的工具
    			c.JSON(http.StatusBadRequest, gin.H{"error":err.Error()})
    			return
    		}
    		// 判断用户名和密码是否正确
    		if login.User != "root" || login.Password != "admin" {
    			c.JSON(http.StatusBadRequest, gin.H{"status":"304"})
    			return
    		}
    		c.JSON(http.StatusOK, gin.H{"status":200})
    	})
    	r.Run(":8000")
    }
    
    • 访问URL:http://127.0.0.1:8000/root/admin
  • 相关阅读:
    邻项交换排序
    [POJ 2559]Largest Rectangle in a Histogram 单调栈
    最大子序和 单调队列
    单调栈 总结
    计算中缀表达式
    [HYSBZ 2457] 双端队列
    数组的宽度 单调栈
    SVM从入门到精通
    CVPR2018_RotationNet: Joint Object Categorization and Pose Estimation Using Multiviews from Unsupervised Viewpoints
    比特币以及区块链入门
  • 原文地址:https://www.cnblogs.com/xujunkai/p/13341748.html
Copyright © 2011-2022 走看看