GIN框架_请求参数

请求参数

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.hqwc.cn/news/703250.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第四篇 Asciidoc - MindMap 思维导图 不是事

MindMap 是一种对思维的简单抽象,说到底,就是一个树状结构。 以下是一个样例: Figure 1. MindMap示例 我们的目录结构、模块结构、分类结构等等,都是树型结构,它非常普遍,因此 MindMap 是笔记软件中,获得最多支持的一种图。 精确地说,这类图,是对思维结构的一种映射…

AI图像生成-调整

一、两张图画风不相似 2、在两张图的共同输出口新添加一个空白正面提示词板块和条件合并板块 二、预处理插件(提取人物姿态) 1、新建节点-》ControlNet预处理器-》面部与姿态-》Openpose姿态预处理器 2、添加上传图片板块与预览图片板块 3、提取姿态 右…

实战| 手把手教你实现俯卧撑实时计数:OpenCV+MediaPipe

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

Unity使用sherpa-onnx实现离线语音合成

sherpa-onnx https://github.com/k2-fsa/sherpa-onnx 相关dll和lib库拷进Unity,官方示例代码稍作修改 using SherpaOnnx; using System; using System.IO; using System.Runtime.InteropServices; using UnityEngine;public class TTS : MonoBehaviour {public st…

Audio Hijack for Mac 激活版:音频录制与处理软件

Audio Hijack for Mac,让您的音频创作更加高效、便捷。它支持多种音频格式的录制和导出,包括MP3、AAC、WAV等,让您的音频作品具有更广泛的兼容性。同时,软件界面简洁明了,操作流畅自然,即使您是初学者也能快…

HT3S-ECS-MDN网关引领智能称重新篇章欧姆龙EtherCAT PLC的集成应用案例

在现代化工业生产中,精确的数据采集和高效的通信系统是确保生产流程顺利运行的关键。特别是在称重环节,数据的准确性和实时性对于生产质量和成本控制至关重要。今天,我们将为您介绍一个成功的案例,展示HT3S-ECS-MDN网关如何连接称…

探索未来:Google I/O 2024 AI重磅发布一览

亲爱的读者们,大家期待已久的Google I/O开发者大会终于到来了!今年的大会尤为特别,Google在发布会上大力强调了人工智能(AI)的重要性,可以说AI成为了绝对的主角。为了让大家快速了解今年的重点内容&#xf…

开发人员必备3D建模基础

如果你想深入了解 3D 建模世界,这个快速概述可以帮助你入门。 3D 建模是一项强大的技能,允许开发人员创建逼真的视觉效果、设计产品和探索虚拟空间。 无论你对游戏开发、动画还是产品设计感兴趣,了解 3D 建模的基础知识都是至关重要的。 学…

功能安全如何在公司顺利开展?-亚远景科技

亚远景功能安全主题线上会议报名开启! 随着汽车技术的不断发展,汽车系统的复杂性和交互性大幅增加,功能安全成为确保驾驶员、乘客及行人安全的关键。 本场功能安全线上会议,亚远景为汽车行业的相关人员准备了以下内容&#xff1a…

Vue3使用datav3报错的三个问题解决

我这里写的是按需引入 报错问题Cannot find module dataview/datav-vue3 修改datav源码中的package.json文件 修改为 "module": "./es/index.mjs", 然就就会遇见新的报错问题 报错问题TypeError: Cannot read properties of null (reading $el) 然后修改…

【Kafka】2.深入理解Kafka事件流平台及其核心概念

1.事件流(Event streaming) 事件流是人体中枢神经系统的数字化的等价物。它是构建“始终在线”世界的技术基础,在这个世界中,企业越来越多地被定义为软件化和自动化,而软件的用户本身也是软件。 从技术上讲,事件流是从数据库、传…

通电即用,极简运维:带您10分钟零配置启动超大型园区网络

为顺应数字经济发展潮流,越来越多企业选择云网融合,这给企业园区的运维人员,特别是中大型企业园区的运维人员带来新的挑战:随着企业规模扩大,系统和应用程序的复杂性也在增加,运维人员需要不断学习新技术&a…