Gin 绑定Query JSON FORM URI 示例

package main

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

type PersonJson struct {
	Age     int    `json:"age" binding:"required,gt=10"`
	Address string `json:"addr" binding:"required"`
	Name    string `json:"name" binding:"required"`
}

type PersonForm struct {
	Age     int    `form:"age" json:"age" binding:"required,gt=10"`
	Address string `form:"addr" json:"addr" binding:"required"`
	Name    string `form:"name" json:"name" binding:"required"`
}

type PersonUri struct {
	Age     int    `uri:"age" binding:"required,gt=10"`
	Address string `uri:"addr" binding:"required"`
	Name    string `uri:"name" binding:"required"`
}

func main() {
	r := gin.Default()
	r.POST("/bind/json", testJson)
	r.GET("/bind/query", testQuery)
	r.POST("/bind/form", testFrom)
	r.PUT("/bind/uri/:age/:name/:addr", testUri)
	err := r.Run()
	if err != nil {
		panic(err)
	}
}

/*
curl --request POST 'http://127.0.0.1:8080/bind/json' \
--header 'Content-Type: application/json' \
--data-raw '{
    "age": 11,
    "addr": "北京",
    "name": "老大"
}'
*/
func testJson(c *gin.Context) {
	var person PersonJson
	if err := c.ShouldBindJSON(&person); err == nil {
		c.JSON(http.StatusOK, person)
	} else {
		c.String(http.StatusBadRequest, "person bing error: %v", err)
		c.Abort()
		return
	}
}

// curl --request GET 'http://127.0.0.1:8080/bind/query?age=19&addr=内蒙&name=小小'
func testQuery(c *gin.Context) {
	var person PersonForm
	if err := c.ShouldBindQuery(&person); err == nil {
		c.JSON(http.StatusOK, person)
	} else {
		c.String(http.StatusBadRequest, "person bing error: %v", err)
		c.Abort()
		return
	}
}

// curl --request PUT 'http://127.0.0.1:8080/bind/uri/20/小小/北京'
func testUri(c *gin.Context) {
	var person PersonUri
	if err := c.ShouldBindUri(&person); err == nil {
		c.JSON(http.StatusOK, person)
	} else {
		c.String(http.StatusBadRequest, "person bing error: %v", err)
		c.Abort()
		return
	}
}

/*
curl --request POST 'http://127.0.0.1:8080/bind/form' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--form 'age="20"' \
--form 'name="大大"' \
--form 'addr="天通苑"'
*/
func testFrom(c *gin.Context) {
	var person PersonForm
	if err := c.ShouldBindWith(&person, binding.Form); err == nil {
		c.JSON(http.StatusOK, person)
	} else {
		c.String(http.StatusBadRequest, "person bing error: %v", err)
		c.Abort()
		return
	}
}


posted @   郭赫伟  阅读(491)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示