gin框架04

gin數(shù)據(jù)解析和綁定

json數(shù)據(jù)解析和綁定

客戶(hù)端傳參,后端接收到并解析到結(jié)構(gòu)體

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)
// 定義接收數(shù)據(jù)的結(jié)構(gòu)體
type Login struct {
    // banding:"required"修飾的字段,若接收為空格,則報(bào)錯(cuò),是必須字段
    User string `form:"username" json:"user" uri:"user" xml:"user" banding:"required"`
    Password string `form:"password" json:"password" uri:"password" xml:"password" banding:"required"`
}

func main() {
    // 1. 創(chuàng)建路由器
    r := gin.Default()
    // JSON綁定
    r.POST("loginJSON",func(c *gin.Context){
        // 聲明接收的變量
        var json Login
        // 將request的body中的數(shù)據(jù),自動(dòng)按照json格式解析到結(jié)構(gòu)體
        if err:= c.ShouldBindJSON(&json);err!=nil{
            // 返回錯(cuò)誤信息
            // gin.H封裝了生成json數(shù)據(jù)的工具
            c.JSON(http.StatusBadRequest,gin.H{"error":err.Error()})
            return
        }
        // 判斷用戶(hù)名密碼是否正確
        if json.User != "root" || json.Password != "admin"{
            c.JSON(http.StatusBadRequest,gin.H{"error":"304"})
            return
        }
        c.JSON(http.StatusOK,gin.H{"status":"200"})
    })
    // 3.監(jiān)聽(tīng)端口,默認(rèn)8080
    r.Run(":8000")
}

cmd測(cè)試

curl http://127.0.0.1:8000/loginJSON -H 'content-type:application/json' -d "{\"user\":\"root\",\"password\":\"admin\"}" -X POST

表單的數(shù)據(jù)解析和綁定

請(qǐng)求頁(yè)面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登錄</title>
</head>
<body>
<form action="http://127.0.0.1:8000/loginForm" method="post" enctype="multipart/form-data">
    用戶(hù)名:<input type="text" name="username">
    <br>
    密&nbsp&nbsp碼:<input type="password" name="password">
    <input type="submit" value="登錄">
</form>
</body>
</html>
package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)
// 定義接收數(shù)據(jù)的結(jié)構(gòu)體
type Login struct {
    // banding:"required"修飾的字段,若接收為空格,則報(bào)錯(cuò),是必須字段
    User string `form:"username" json:"user" uri:"user" xml:"user" banding:"required"`
    Password string `form:"password" json:"password" uri:"password" xml:"password" banding:"required"`
}

func main() {
    // 1. 創(chuàng)建路由器
    r := gin.Default()
    // JSON綁定
    r.POST("loginForm",func(c *gin.Context){
        // 聲明接收的變量
        var form Login
        // Bind()默認(rèn)解析丙綁定form格式
        // 根據(jù)請(qǐng)求頭中content-type自動(dòng)推斷
        if err := c.Bind(&form);err != nil {
            c.JSON(http.StatusBadRequest,gin.H{"error":err.Error()})
            return
        }
        // 判斷用戶(hù)名密碼是否正確
        if form.User != "root" || form.Password != "admin" {
            c.JSON(http.StatusBadRequest,gin.H{"status":"304"})
            return
        }
        c.JSON(http.StatusOK,gin.H{"status":"200"})
    })
    // 3.監(jiān)聽(tīng)端口,默認(rèn)8080
    r.Run(":8000")
}
結(jié)果.png

URI數(shù)據(jù)解析和綁定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登錄</title>
</head>
<body>
<form action="http://127.0.0.1:8000/loginForm" method="post" enctype="multipart/form-data">
    用戶(hù)名:<input type="text" name="username">
    <br>
    密&nbsp&nbsp碼:<input type="password" name="password">
    <input type="submit" value="登錄">
</form>
</body>
</html>
package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)
// 定義接收數(shù)據(jù)的結(jié)構(gòu)體
type Login struct {
    // banding:"required"修飾的字段,若接收為空格,則報(bào)錯(cuò),是必須字段
    User string `form:"username" json:"user" uri:"user" xml:"user" banding:"required"`
    Password string `form:"password" json:"password" uri:"password" xml:"password" banding:"required"`
}

func main() {
    // 1. 創(chuàng)建路由器
    r := gin.Default()
    // JSON綁定
    r.GET("/:user/:password",func(c *gin.Context){
        // 聲明接收的變量
        var login Login
        // Bind()默認(rèn)解析丙綁定form格式
        // 根據(jù)請(qǐng)求頭中content-type自動(dòng)推斷
        if err := c.ShouldBindUri(&login);err != nil {
            c.JSON(http.StatusBadRequest,gin.H{"error":err.Error()})
            return
        }
        // 判斷用戶(hù)名密碼是否正確
        if login.User != "root" || login.Password != "admin" {
            c.JSON(http.StatusBadRequest,gin.H{"status":"304"})
            return
        }
        c.JSON(http.StatusOK,gin.H{"status":"200"})
    })
    // 3.監(jiān)聽(tīng)端口,默認(rèn)8080
    r.Run(":8000")
}

cmd測(cè)試

curl http://127.0.0.1:8000/root/admin
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

  • JSON數(shù)據(jù)解析和綁定 ShouldBindJSON 客戶(hù)端傳參,后端解析綁定package mainimport...
    TZX_0710閱讀 449評(píng)論 0 1
  • 轉(zhuǎn)發(fā)自:http://shanshanpt.github.io/2016/05/03/go-gin.html gi...
    dncmn閱讀 6,202評(píng)論 0 1
  • Gin web 框架 Gin 是Golang編寫(xiě)的web框架。它具有類(lèi)似于martini的API接口,同時(shí)比htt...
    A_Donga閱讀 1,451評(píng)論 0 0
  • Gin是一個(gè)用Go語(yǔ)言編寫(xiě)的web框架。它是一個(gè)類(lèi)似于martini但擁有更好性能的API框架, 由于使用了htt...
    雪上霜閱讀 1,737評(píng)論 0 1
  • 介紹 Gin 是一個(gè)用 Go (Golang) 編寫(xiě)的 web 框架。 它是一個(gè)類(lèi)似于 martini 但擁有更好...
    零一間閱讀 21,361評(píng)論 0 24

友情鏈接更多精彩內(nèi)容