GIN框架_请求参数

server/2024/11/13 9:43:02/

请求参数

1. Get请求参数

使用Get请求传参时,类似于这样 http://localhost:8080/user/save?id=11&name=zhangsan

如何获取呢?

1.1 普通参数

request url: http://localhost:8080/user/save?id=11&name=zhangsan

r.GET("/user/save", func(ctx *gin.Context) {id := ctx.Query("id")name := ctx.Query("name")ctx.JSON(200, gin.H{"id":   id,"name": name,})})

如果参数不存在,就给一个默认值:

r.GET("/user/save", func(ctx *gin.Context) {id := ctx.Query("id")name := ctx.Query("name")address := ctx.DefaultQuery("address", "北京")ctx.JSON(200, gin.H{"id":      id,"name":    name,"address": address,})})

判断参数是否存在:

r.GET("/user/save", func(ctx *gin.Context) {id, ok := ctx.GetQuery("id")address, aok := ctx.GetQuery("address")ctx.JSON(200, gin.H{"id":      id,"idok":    ok,"address": address,"aok":     aok,})})

id是数值类型,上述获取的都是string类型,根据类型获取:

type User struct {Id   int64  `form:"id"`Name string `form:"name"`
}
r.GET("/user/save", func(ctx *gin.Context) {var user Usererr := ctx.BindQuery(&user)if err != nil {log.Println(err)}ctx.JSON(200, user)
})

也可以:

r.GET("/user/save", func(ctx *gin.Context) {var user Usererr := ctx.ShouldBindQuery(&user)if err != nil {log.Println(err)}ctx.JSON(200, user)
})

区别:

type User struct {Id      int64  `form:"id"`Name    string `form:"name"`Address string `form:"address" binding:"required"`
}

当bind是必须的时候,ShouldBindQuery会报错,开发者自行处理,状态码不变。

BindQuery则报错的同时,会将状态码改为400。所以一般建议是使用Should开头的bind。

1.2 数组参数

请求url:http://localhost:8080/user/save?address=Beijing&address=shanghai

r.GET("/user/save", func(ctx *gin.Context) {address := ctx.QueryArray("address")ctx.JSON(200, address)})
r.GET("/user/save", func(ctx *gin.Context) {address, ok := ctx.GetQueryArray("address")fmt.Println(ok)ctx.JSON(200, address)})
r.GET("/user/save", func(ctx *gin.Context) {var user Usererr := ctx.ShouldBindQuery(&user)fmt.Println(err)ctx.JSON(200, user)})

1.3 map参数

请求url:http://localhost:8080/user/save?addressMap[home]=Beijing&addressMap[company]=shanghai

r.GET("/user/save", func(ctx *gin.Context) {addressMap := ctx.QueryMap("addressMap")ctx.JSON(200, addressMap)})
r.GET("/user/save", func(ctx *gin.Context) {addressMap, _ := ctx.GetQueryMap("addressMap")ctx.JSON(200, addressMap)})

map参数 bind并没有支持

2. Post请求参数

post请求一般是表单参数和json参数

2.1 表单参数

在这里插入图片描述

r.POST("/user/save", func(ctx *gin.Context) {id := ctx.PostForm("id")name := ctx.PostForm("name")address := ctx.PostFormArray("address")addressMap := ctx.PostFormMap("addressMap")ctx.JSON(200, gin.H{"id":         id,"name":       name,"address":    address,"addressMap": addressMap,})})
r.POST("/user/save", func(ctx *gin.Context) {var user Usererr := ctx.ShouldBind(&user)addressMap, _ := ctx.GetPostFormMap("addressMap")user.AddressMap = addressMapfmt.Println(err)ctx.JSON(200, user)})

2.2 json参数

{"id":1111,"name":"zhangsan","address": ["beijing","shanghai"],"addressMap":{"home":"beijing"}
}
r.POST("/user/save", func(ctx *gin.Context) {var user Usererr := ctx.ShouldBindJSON(&user)fmt.Println(err)ctx.JSON(200, user)})

其他类型参数注入xml,yaml等和json道理一样

3. 路径参数

请求url:http://localhost:8080/user/save/111

r.POST("/user/save/:id", func(ctx *gin.Context) {ctx.JSON(200, ctx.Param("id"))})

4. 文件参数

r.POST("/user/save", func(ctx *gin.Context) {form, err := ctx.MultipartForm()if err != nil {log.Println(err)}files := form.Filefor _, fileArray := range files {for _, v := range fileArray {ctx.SaveUploadedFile(v, "./"+v.Filename)}}ctx.JSON(200, form.Value)})
	if err != nil {log.Println(err)}files := form.Filefor _, fileArray := range files {for _, v := range fileArray {ctx.SaveUploadedFile(v, "./"+v.Filename)}}ctx.JSON(200, form.Value)
})


http://www.ppmy.cn/server/41852.html

相关文章

收藏与品鉴:精酿啤酒的艺术之旅

啤酒,这一古老的酒精饮品,不仅是人们生活中的日常饮品,更是一种艺术和文化的载体。对于Fendi club啤酒而言,收藏与品鉴更是一门深入骨髓的艺术之旅。 Fendi club啤酒的收藏,不仅仅是简单的存放和保管,而是一…

Leecode热题100---15:三数之和为零

题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。 请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的…

搜维尔科技:【案例分享】Xsens用于工业制造艺术创新设计平台

用户名称:北京理工大学 主要产品:Xsens MVN Awinda惯性动作捕捉系统 在设计与艺术学院的某实验室内,通过Xsens惯性动作捕捉,对人体动作进行捕捉,得到人体三维运动数据,将捕到的数据用于后续应用研究。…

国学经典 书籍推荐

国学经典书籍浩如烟海,涵盖了哲学、历史、文学、语言学等多个方面,以下是一些被广泛认为是必读的经典推荐: 儒家经典 《论语》:记录孔子及其弟子言行,儒家思想的核心著作。《孟子》:孟子的言行录&#xff0…

【使用Condition来模拟生产消费】

使用Condition来模拟生产消费 1. 关于ReentrantLock 和condition的认知?2.使用condition实现生产者-消费者1. 关于ReentrantLock 和condition的认知? /*Q: ReentrantLock是如何实现管理锁和线程的?A: ReentrantLock是并发包中 一个类,它实现了Lock接口,提供了比内置synch…

Shopee、Lazada等平台怎么做测评?

最近有很多人咨询南哥跨境电商平台测评应该怎么做,今天我就针对东南亚站点,详细跟大家分享一下东南亚平台测评需要哪些资源 测评环境系统 不管做任何平台,首先你要有一个稳定的测评环境系统,测评环境系统的底层逻辑就是通过一台…

leetcode-字符串变形-104

题目要求 思路 1.首先根据ASCII的规则,把字符串大小写替换,空格保持不变 2.将整个字符串进行翻转 3.以空格为区间,将区间内的字符串进行翻转,其中翻转的函数reverse() 代码实现 class Solution { public:string trans(string s…

“普惠门诊保”24年升级回归! 您医保的有效商业补充!

2024年5月15日, “普惠门诊保如意版”正式官宣发布! 2023年,中国人民财产保险股份有限公司湖南省分公司积极创新的惠民型商业补充医疗保险,推出湖南省内首款互联网门诊医疗保险“普惠门诊保” 2024年,在去年保障内容…