1. 程式人生 > 其它 >gin資料解析和解綁

gin資料解析和解綁

★Json資料解析和繫結

客戶端傳參,後端接收並解析到結構體

package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

// 定義接收資料的結構體
type Login struct {
    // binding:"required"修飾的欄位,若接收為空值,則報錯,是必須欄位
    User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
    Pssword 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 // 將request的body中的資料,自動按照json格式解析到結構體 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.Pssword != "admin" { c.JSON(http.StatusBadRequest, gin.H{
"status": "304"}) return } c.JSON(http.StatusOK, gin.H{"status": "200"}) }) r.Run(":8000") }

★表單資料解析和繫結

html前端程式碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<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>
</html>

go後端程式碼:

package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

// 定義接收資料的結構體
type Login struct {
    // binding:"required"修飾的欄位,若接收為空值,則報錯,是必須欄位
    User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
    Pssword 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 {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
        // 判斷使用者名稱密碼是否正確
        if form.User != "root" || form.Pssword != "admin" {
            c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
            return
        }
        c.JSON(http.StatusOK, gin.H{"status": "200"})
    })
    r.Run(":8000")
}

★URI資料解析和繫結

package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

// 定義接收資料的結構體
type Login struct {
    // binding:"required"修飾的欄位,若接收為空值,則報錯,是必須欄位
    User    string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
    Pssword 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
        // Bind()預設解析並繫結form格式
        // 根據請求頭中content-type自動推斷
        if err := c.ShouldBindUri(&login); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
        // 判斷使用者名稱密碼是否正確
        if login.User != "root" || login.Pssword != "admin" {
            c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
            return
        }
        c.JSON(http.StatusOK, gin.H{"status": "200"})
    })
    r.Run(":8000")
}