Gin 获取请求参数

1、获取URL?后的参数(不区分请求方式)

// 获取请求url ? 后的参数(url:8080/add?name=kelvin)
func GetUrlParam(ctx *gin.Context) {
    name := ctx.Query("name")
    defaultName := ctx.DefaultQuery("name", "defaultName...")
    ctx.JSON(http.StatusOK, gin.H{
        "name":        name,
        "defaultName": defaultName,
    })
}

2、获取form参数(post方式)

// 获取请求表单的参数
func GetFormParam(ctx *gin.Context) {
    formName := ctx.PostForm("name")
    defaultPostFormName := ctx.DefaultPostForm("name", "default name form ~~~")
    ctx.JSON(http.StatusOK, gin.H{
        "formName":            formName,
        "defaultPostFormName": defaultPostFormName,
    })
}

3、获取json参数

// 获取请求Json参数体
func GetJson(ctx *gin.Context) {
    data, err := ctx.GetRawData()
    if err != nil {
        ctx.JSON(http.StatusInternalServerError, gin.H{
            "msg": "获取json数据异常",
        })
    }
    var m map[string]interface{}
    // 反序列化
    _ = json.Unmarshal(data, &m)
    ctx.JSON(http.StatusOK, gin.H{
        "json": &m,
    })
}

 4、获取路径参数

// 获取请求url中的路径参数(url:8080/add/:name/:age)
func GetUrlPathParam(ctx *gin.Context) {
    name := ctx.Param("name")
    age := ctx.Param("age")
    ctx.JSON(http.StatusOK, gin.H{
        "name": name,
        "age":  age,
    })
}

 5、获取url指定位置后的路径

// 获取请求url中的路径(url:8080/add/*path,url:8080/add/student/ok,path取出即是/student/ok)
func GetUrlLike(ctx *gin.Context) {
    path := ctx.Param("path")
    ctx.JSON(http.StatusOK, gin.H{
        "path": path,
    })
}

 6、struct绑定请求参数

// 将请求参数直接复制给struct对象的属性
type User struct {
    Name string `form:"name"`
    Age  int64  `form:"age"`
}

func BindParamToStruct(ctx *gin.Context) {
    var user User
    // 将请求参数直接赋值给user对象
    err := ctx.BindQuery(&user)
    // 和上个方法一致,只是如果user规定某个字段必传时,上个方法调用时接口响应码为400,本方法可以自行处理异常,正常返回数据
    //err := ctx.ShouldBindQuery(&user)
    if err != nil {
        log.Println(err)
    }
    ctx.JSON(http.StatusOK, gin.H{
        "user": user,
    })
}

7、获取前端url参数数组形式

// url:8080/set?hobby=foot&hobby=apple
func GetUrlArray(ctx *gin.Context) {
    // 获取参数名是“hobby”的参数,结果为数组
    array := ctx.QueryArray("hobby")
    // 同上方法,只不过会有是否获取成功的返回值
    //queryArray, ok := ctx.GetQueryArray("hobby")
    ctx.JSON(http.StatusOK, gin.H{
        "array": array,
    })
}

注意:也可以使用struct绑定形式接受数组,需要在struct中定义数组类型的属性并将该属性的tag名改为请求参数名

8、获取文件数据

// 获取form表单数据及文件
func FileUpload(ctx *gin.Context) {
    form, err := ctx.MultipartForm()
    if err != nil {
        log.Println(err)
    }
    value := form.Value
    filesMap := form.File
    log.Println(filesMap)
    for _, fileArray := range filesMap {
        log.Println(fileArray)
        for _, file := range fileArray {
            ctx.SaveUploadedFile(file, "./files/"+file.Filename)
        }
    }
    ctx.JSON(http.StatusOK, gin.H{
        "value": value,
    })
}

 

 未完待续~~~

 

posted @ 2023-03-16 11:36  佛祖让我来巡山  阅读(319)  评论(0编辑  收藏  举报

佛祖让我来巡山博客站 - 创建于 2018-08-15

开发工程师个人站,内容主要是网站开发方面的技术文章,大部分来自学习或工作,部分来源于网络,希望对大家有所帮助。

Bootstrap中文网