Gin教程(7)—表单数据

  1. 代码示例
  2. 详解/说明

代码示例

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

var (
    webEng *gin.Engine
)

func main() {
    webEng = gin.Default()
    webEng.POST("/form", HandleForm)
    webEng.Run()
}

func HandleForm(c *gin.Context) {
    //获取表单值,不存在时,使用默认值
    name := c.DefaultPostForm("name", "guest")

    //获取表单值,如果不存在或者内容为空,都将得到空字符串
    mobile := c.PostForm("mobile")

    var (
        age string
        has bool
    )
    //获取表单值,同时检测是否有设置
    if age, has = c.GetPostForm("age"); !has {
        c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
            "error": "lost age",
        })
        return
    }

    //获取表单数组
    hobbies := c.PostFormArray("hobbies")
    //获取表单数组,同时检测是否设置
    if hobbies, has = c.GetPostFormArray("hobbies"); !has {
        c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
            "error": "lost hobbies",
        })
        return
    }

    //获取表单map
    marks := c.PostFormMap("marks")
    //获取表单map,同时检测是否设置
    if marks, has = c.GetPostFormMap("marks"); !has {
        c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
            "error": "lost marks",
        })
        return
    }

    c.JSON(http.StatusOK, gin.H{
        "name":    name,
        "mobile":  mobile,
        "age":     age,
        "hobbies": hobbies,
        "marks":   marks,
    })
}

postman 构造请求和响应结果

curl 请求和响应

curl -X POST \
  http://127.0.0.1:8080/form \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'name=root&mobile=13012345678&age=16&hobbies=music&hobbies=reading&marks%5Bgender%5D=female&marks%5Bcity%5D=tokyo'

详解/说明

  1. gin默认提供的普通表单请求处理方法有7种(数据绑定除外):
    • Context.PostForm(), Context.GetPostForm()
    • Context.PostFormArray(), Context.GetPostFormArray()
    • Context.PostFormMap(), Context.GetPostFormMap()
    • Context.DefaultPostForm()
  2. 其中DefaultPostForm() 可以设置参数默认值。
  3. 以 ‘Get’ 开始的函数在获取参数值的同时检测是否有设置。
  4. 直接以‘PostForm’开始的函数是对应‘Get’函数的封装,只是忽略了参数存在性的检测。
  5. 除此之外还有文件的表单上传处理方法,在下篇中详细讲解。

代码下载:https://github.com/IrvinYoung/gin-lessons


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 irvin.em@live.com。

文章标题:Gin教程(7)—表单数据

文章字数:463

本文作者:dino

发布时间:2019-11-29, 11:34:49

最后更新:2019-11-29, 11:38:26

原始链接:https://blog.walkbc.com/2019/11/29/gin-lesson-formData/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

QQ交流群:273078549

目录