gin框架入门(三)-路由参数

目录

PATH传值-Get请求

查询参数-Get请求

Form表单传值-Post请求

数据绑定到结构体

获取Query(get)、Form表单(post)数据绑定到结构体

JSON数据绑定到结构体

XML数据绑定到结构体


PATH传值-Get请求

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()

	r.GET("/getInfo/:name/*action", func(c *gin.Context) {
		username := c.Param("name")
		action := c.Param("action")
		c.JSON(http.StatusOK, gin.H{
			"username": username,
			"action":   action,
		})
	})
	r.Run(":8080")
}

示例中,可以匹配/getInfo/xx/或者/getInfo/xx/xx路径

:name表示是必须参数

*action表示是可选参数

如路径/getInfo/mina/run。name匹配mina;action匹配/run

查询参数-Get请求

c.Query                 获取查询参数

c.DefaultQuery 获取查询参数,并给定默认值。

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()
	r.GET("/getInfo", func(c *gin.Context) {
		username := c.Query("username")
		age := c.Query("age")
		page := c.DefaultQuery("page", "1")
		c.JSON(http.StatusOK, gin.H{
			"username": username,
			"age":      age,
			"page":     page,
		})
	})
	r.Run(":8080")
}

Form表单传值-Post请求

c.PostForm                        获取Form表单数据

c.DefaultPostForm             获取Form表单数据,并给定默认值。

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()
	r.POST("/postForm", func(c *gin.Context) {
		username := c.PostForm("username")
		age := c.PostForm("age")
		page := c.DefaultPostForm("page", "1")
		c.JSON(http.StatusOK, gin.H{
			"username": username,
			"age":      age,
			"page":     page,
		})
	})
	r.Run(":8080")
}

数据绑定到结构体

获取Query(get)、Form表单(post)数据绑定到结构体

Query(get)、Form表单(post)数据绑定到结构体的方法相同。都是使用c.ShouldBind绑定数据。

结构体中需要用form标签直接form表单的key,json标签为转为json格式时的key。

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

type UserInfo struct {
	Username string `form:"username" json:"user"`
	Age      int    `form:"age" json:"age"`
	Page     int    `form:"page" json:"page"`
}

func main() {
	r := gin.Default()

	r.POST("/postForm", func(c *gin.Context) {
		userInfo := &UserInfo{}

		if err := c.ShouldBind(userInfo); err == nil {
			c.JSON(http.StatusOK, userInfo)
		} else {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		}
	})

	r.GET("/getQuery", func(c *gin.Context) {
		userInfo := &UserInfo{}

		if err := c.ShouldBind(userInfo); err == nil {
			c.JSON(http.StatusOK, userInfo)
		} else {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		}
	})

	r.Run(":8080")
}

JSON数据绑定到结构体

c.ShouldBindJSON                json数据绑定到结构体

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

type UserInfo struct {
	Username string `json:"user"`
	Age      int    `json:"age"`
	Page     int    `json:"page"`
}

func main() {
	r := gin.Default()
	r.POST("/postJSON", func(c *gin.Context) {
		userInfo := &UserInfo{}

		if err := c.ShouldBindJSON(userInfo); err == nil {
			c.JSON(http.StatusOK, userInfo)
		} else {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		}
	})
	r.Run(":8080")
}

XML数据绑定到结构体

结构体中xml标签指定key

c.BindXML                绑定XML数据到结构体

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

type UserInfo struct {
	Username string `xml:"username" json:"user"`
	Age      int    `xml:"age" json:"age"`
	Page     int    `xml:"page" json:"page"`
}

func main() {
	r := gin.Default()
	r.POST("/postXML", func(c *gin.Context) {
		userInfo := &UserInfo{}

		// 解析XML
		if err := c.ShouldBindXML(userInfo); err == nil {
			c.JSON(http.StatusOK, userInfo)
		} else {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		}
	})
	r.Run(":8080")
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值