示例gin框架对Get请求的响应

本文受了获取Get参数 · Gin中文文档 · 看云以及go的gin框架使用(四):get请求_美丽的泡沫-CSDN博客的启发

Get请求是8种http请求之一。其格式是

域名?参数名1=参数值1&参数名2=参数值2...............

使用DefaultQuery或者Query函数响应Get请求。

目录

不带通配符的响应:

使用通配符:的响应:

使用通配符*的响应:


不带通配符的响应:

r.GET("/obj", func(c *gin.Context) {
		var name = c.DefaultQuery("filename", "teapot.obj")
		c.Header("Content-Type", "text/plain; charset=utf-8")
		c.Header("Content-Disposition", "inline;filename=\""+name+"\"")
		content, _ := ioutil.ReadFile(name)
		c.String(200, string(content))
		//fmt.Println(string(content))
	})

DefaultQuery(变量1,变量2)返回值就是Get传来的参数值。变量1是请求的“=”等号左边的参数名。假如不带参数,则默认返回变量2.

Query函数则只能响应带参数的情况。

使用通配符:的响应:

示例见go gin - How to define a go-gin route with an id in the middle - Stack Overflow

假如url字符串被若干/符号分割为若干段,而其中一段是个动态的字段(或者说是可变的字段),比如用户ID,则使用:通配符可以把这个字段提取出来。

router := gin.Default()

router.GET("/user/:userid/status", func(c *gin.Context) {
    userid := c.Param("userid") 
    message := "userid is " + userid
    c.String(http.StatusOK, message)
    fmt.Println(message)
})

在上面的示例中,假如url含有如下内容:

/user/jackson/status

则c.Param("userid")将返回 jackson

使用通配符*的响应:

假如url字符串被若干/符号分割为若干段,而最后一段是个动态的字段(或者说是可变的字段),则通配符*可以将这个字段提取出来:Golang - Gin router 基本介紹

r.GET("/user/:name/*action", func(c *gin.Context) {
		name := c.Param("name")
		action := c.Param("action")
		c.JSON(200, gin.H{
			"message": name,
			"action":  action,
		})
	})

action将代表/user/:name/后面的所有字符串(即使后面还有/,/也会计入c.Param("action")的返回值)。

假如我通过下面的指令访问服务器:

curl -X GET h80/user/adam/testhejklasjkdlfasdf/adsfasdf

则返回值为:

{"action":"/testhejklasjkdlfasdf/adsfasdf","message":"adam"}

 

要在gin框架中接收POST请求并在请求到达处理程序之前进行中间件处理,可以使用gin的中间件功能。以下是一个示例中间件,它可以将POST请求的请求体中的JSON解析为一个结构体,并将其绑定到请求的上下文中: ```go func JsonMiddleware() gin.HandlerFunc { return func(c *gin.Context) { if c.Request.Method == "POST" { var data interface{} err := c.BindJSON(&data) if err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } c.Set("json_data", data) } c.Next() } } ``` 在这个中间件中,我们首先检查请求的HTTP方法是否为POST。如果是,我们尝试将请求体中的JSON解析为一个结构体。如果解析失败,我们返回一个HTTP 400错误响应,并终止请求。否则,我们将解析后的数据绑定到请求上下文的“json_data”键中,并继续处理请求。 要在gin应用程序中使用这个中间件,我们只需要在路由注册之前将其添加到应用程序的中间件链中: ```go router := gin.Default() router.Use(JsonMiddleware()) router.POST("/my-endpoint", func(c *gin.Context) { data := c.MustGet("json_data") // 处理请求数据 }) ``` 在这个示例中,我们使用gin.Default()创建一个新的路由器实例,并使用JsonMiddleware()函数添加一个中间件到路由器的中间件链中。然后,我们注册一个POST处理程序,该处理程序使用c.MustGet("json_data")从请求上下文中获取JSON解析后的数据,并对数据进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值