当前位置: 首页 > news >正文

golang gin——controller 模型绑定与参数校验

controller 模型绑定与参数校验

gin框架提供了多种方法可以将请求体的内容绑定到对应struct上,并且提供了一些预置的参数校验

绑定方法

根据数据源和类型的不同,gin提供了不同的绑定方法

  • Bind, shouldBind: 从form表单中去绑定对象
  • BindJSON, shouldBindJSON: 这两个方法是从json表单中去绑定对象
  • 还有从xml,protobuf等等
参数校验

gin提供了一系列预置的参数校验,可以参考官方文档。 用binding 标签

  • required 必须参数

  • number 要求数字

  • omitempty 允许为空

  • email 邮件格式

等等

实例
package courseimport ("github.com/gin-gonic/gin""net/http"
)func InitRouters(r *gin.Engine) {//使用路由分组api := r.Group("api")initCourse(api)
}func initCourse(group *gin.RouterGroup) {// 路由分组v1 := group.Group("/v1"){// /api/v1/course// 路径携带参数v1.GET("/course/search/:id", course.Get)v1.POST("/course/add/:id", course.Add)v1.PUT("/course/edit/:id", course.Edit)v1.DELETE("/course/del", course.Delete)}
}// 模型绑定, gin 引用了 validator,有一些预置标签
type course struct {Name string 		`json:"name"     form:"name" binding:"required"`Teacher string		`json:"teacher"  form:"teacher" binding:"required"`Duration int		`json:"duration" form:"duration" binding:"number"`
}func Add(c *gin.Context) {req := &course{}// 从form表单去绑定 c.Bind() c.ShouldBind()// 从json里去取值 c.BindJSON()// 带should的bind 可以去返回错误,不带的会直接响应请求err := c.ShouldBindJSON(req)if err != nil {c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error(),})return}c.JSON(http.StatusOK, req)
}func Get(c *gin.Context) {// 获取路径上的参数id := c.Param("id")// 都是gin.context作为入参c.JSON(http.StatusOK, gin.H{"method": c.Request.Method,"path": c.Request.URL.Path,"id": id,})
}func Edit(c *gin.Context) {req := &course{}err := c.ShouldBindJSON(req)if err != nil {c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error(),})return}c.JSON(http.StatusOK, gin.H{"method": c.Request.Method,"path": c.Request.URL.Path,"req": req,})
}func Delete(c *gin.Context) {// 从queryString 获取id := c.Query("id")// 都是gin.context作为入参c.JSON(http.StatusOK, gin.H{"method": c.Request.Method,"path": c.Request.URL.Path,"id": id,})
}
测试

在这里插入图片描述

http://www.lryc.cn/news/187695.html

相关文章:

  • 办公技巧:Excel日常高频使用技巧
  • 【jvm--方法区】
  • 智慧楼宇3D数据可视化大屏交互展示实现了楼宇能源的高效、智能、精细化管控
  • 算法题:摆动序列(贪心算法解决序列问题)
  • 接口自动化测试yaml+requests+allure技术,你学会了吗?
  • android 获取局域网其他设备ip
  • angular中使用 ngModel 自定义组件
  • kubernetes pod日志查看用户创建
  • HTML5+CSSday4综合案例二——banner效果
  • 关于红包雨功能的探索
  • 【已解决】Python打包文件执行报错:ModuleNotFoundError: No module named ‘pymssql‘
  • 华为云云耀云服务器L实例评测|测试CentOS的网络配置和访问控制
  • CSP模拟51联测13 B.狗
  • GEO生信数据挖掘(七)差异基因分析
  • JAVA-SpringBoot入门Demo用IDEA建立helloworld
  • Unity布料系统Cloth
  • 漏电继电器 LLJ-630F φ100 导轨安装 分体式结构 LLJ-630H(S) AC
  • 数据结构和算法(10):B-树
  • VR会议:远程带看功能,专为沉浸式云洽谈而生
  • 实验室管理系统LIMS
  • 开源ERP和CRM套件Dolibarr
  • 视频号双11激励政策,快来看一看
  • Maven最新版本安装及配置
  • 探索ClickHouse——使用MaterializedPostgreSQL同步PostgreSQL数据库
  • 《向量数据库指南》——向量数据库 有必要走向专业化吗?
  • 你必须知道的数据查询途径!!
  • 火焰原子吸收光谱法、容量法和电感耦合等离子体发射光谱法
  • 亚马逊云科技 2023 柏林峰会主题演讲总结
  • CentOS Stream9 安装远程桌面服务 Xrdp
  • 实施运维01