gin框架04

gin数据解析和绑定

json数据解析和绑定

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

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)
// 定义接收数据的结构体
type Login struct {
    // banding:"required"修饰的字段,若接收为空格,则报错,是必须字段
    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. 创建路由器
    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.Password != "admin"{
            c.JSON(http.StatusBadRequest,gin.H{"error":"304"})
            return
        }
        c.JSON(http.StatusOK,gin.H{"status":"200"})
    })
    // 3.监听端口,默认8080
    r.Run(":8000")
}

cmd测试

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

表单的数据解析和绑定

请求页面

<!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">
    用户名:<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"
)
// 定义接收数据的结构体
type Login struct {
    // banding:"required"修饰的字段,若接收为空格,则报错,是必须字段
    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. 创建路由器
    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.Password != "admin" {
            c.JSON(http.StatusBadRequest,gin.H{"status":"304"})
            return
        }
        c.JSON(http.StatusOK,gin.H{"status":"200"})
    })
    // 3.监听端口,默认8080
    r.Run(":8000")
}
结果.png

URI数据解析和绑定

<!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">
    用户名:<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"
)
// 定义接收数据的结构体
type Login struct {
    // banding:"required"修饰的字段,若接收为空格,则报错,是必须字段
    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. 创建路由器
    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.Password != "admin" {
            c.JSON(http.StatusBadRequest,gin.H{"status":"304"})
            return
        }
        c.JSON(http.StatusOK,gin.H{"status":"200"})
    })
    // 3.监听端口,默认8080
    r.Run(":8000")
}

cmd测试

curl http://127.0.0.1:8000/root/admin
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • JSON数据解析和绑定 ShouldBindJSON 客户端传参,后端解析绑定package mainimport...
    TZX_0710阅读 411评论 0 1
  • 转发自:http://shanshanpt.github.io/2016/05/03/go-gin.html gi...
    dncmn阅读 6,099评论 0 1
  • Gin web 框架 Gin 是Golang编写的web框架。它具有类似于martini的API接口,同时比htt...
    A_Donga阅读 1,348评论 0 0
  • Gin是一个用Go语言编写的web框架。它是一个类似于martini但拥有更好性能的API框架, 由于使用了htt...
    雪上霜阅读 1,655评论 0 1
  • 介绍 Gin 是一个用 Go (Golang) 编写的 web 框架。 它是一个类似于 martini 但拥有更好...
    零一间阅读 21,220评论 0 24