API参数

  • 可以通过Context的Param方法来获取API参数
  • localhost:8000/xxx/zhangsan ```go package main

import ( “net/http” “strings”

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

)

func main() { r := gin.Default() r.GET(“/user/:name/action”, func(c gin.Context) { name := c.Param(“name”) action := c.Param(“action”) //截取/ action = strings.Trim(action, “/“) c.String(http.StatusOK, name+” is “+action) }) //默认为监听8080端口 r.Run(“:8000”) }

  1. <a name="RX63W"></a>
  2. #### URL参数
  3. - URL参数可以通过DefaultQuery()或Query()方法获取
  4. - DefaultQuery()若参数不存在,返回默认值,Query()若不存在,返回空串
  5. - API ? name=zs
  6. ```go
  7. package main
  8. import (
  9. "fmt"
  10. "net/http"
  11. "github.com/gin-gonic/gin"
  12. )
  13. func main() {
  14. r := gin.Default()
  15. r.GET("/user", func(c *gin.Context) {
  16. //指定默认值
  17. //http://localhost:8080/user 才会打印出来默认的值
  18. name := c.DefaultQuery("name", "枯藤")
  19. c.String(http.StatusOK, fmt.Sprintf("hello %s", name))
  20. })
  21. r.Run()
  22. }

表单参数

  • 表单传输为post请求,http常见的传输格式为四种:
    • application/json
    • application/x-www-form-urlencoded
    • application/xml
    • multipart/form-data
  • 表单参数可以通过PostForm()方法获取,该方法默认解析的是x-www-form-urlencoded或from-data格式的参数 ```go package main

// import ( “fmt” “net/http”

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

)

func main() { r := gin.Default() r.POST(“/form”, func(c *gin.Context) { types := c.DefaultPostForm(“type”, “post”) username := c.PostForm(“username”) password := c.PostForm(“userpassword”) // c.String(http.StatusOK, fmt.Sprintf(“username:%s,password:%s,type:%s”, username, password, types)) c.String(http.StatusOK, fmt.Sprintf(“username:%s,password:%s,type:%s”, username, password, types)) }) r.Run() }

  1. <a name="uXbEu"></a>
  2. #### JSON数据解析和绑定
  3. ```go
  4. package main
  5. import (
  6. "github.com/gin-gonic/gin"
  7. "net/http"
  8. )
  9. // 定义接收数据的结构体
  10. type Login struct {
  11. // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
  12. User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
  13. Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
  14. }
  15. func main() {
  16. // 1.创建路由
  17. // 默认使用了2个中间件Logger(), Recovery()
  18. r := gin.Default()
  19. // JSON绑定
  20. r.POST("loginJSON", func(c *gin.Context) {
  21. // 声明接收的变量
  22. var json Login
  23. // 将request的body中的数据,自动按照json格式解析到结构体
  24. if err := c.ShouldBindJSON(&json); err != nil {
  25. // 返回错误信息
  26. // gin.H封装了生成json数据的工具
  27. c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  28. return
  29. }
  30. // 判断用户名密码是否正确
  31. if json.User != "root" || json.Pssword != "admin" {
  32. c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
  33. return
  34. }
  35. c.JSON(http.StatusOK, gin.H{"status": "200"})
  36. })
  37. r.Run(":8000")
  38. }

表单数据解析和绑定

  1. package main
  2. import (
  3. "net/http"
  4. "github.com/gin-gonic/gin"
  5. )
  6. // 定义接收数据的结构体
  7. type Login struct {
  8. // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
  9. User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
  10. Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
  11. }
  12. func main() {
  13. // 1.创建路由
  14. // 默认使用了2个中间件Logger(), Recovery()
  15. r := gin.Default()
  16. // JSON绑定
  17. r.POST("/loginForm", func(c *gin.Context) {
  18. // 声明接收的变量
  19. var form Login
  20. // Bind()默认解析并绑定form格式
  21. // 根据请求头中content-type自动推断
  22. if err := c.Bind(&form); err != nil {
  23. c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  24. return
  25. }
  26. // 判断用户名密码是否正确
  27. if form.User != "root" || form.Pssword != "admin" {
  28. c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
  29. return
  30. }
  31. c.JSON(http.StatusOK, gin.H{"status": "200"})
  32. })
  33. r.Run(":8000")
  34. }

URI数据解析和绑定

  1. package main
  2. import (
  3. "net/http"
  4. "github.com/gin-gonic/gin"
  5. )
  6. // 定义接收数据的结构体
  7. type Login struct {
  8. // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
  9. User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
  10. Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
  11. }
  12. func main() {
  13. // 1.创建路由
  14. // 默认使用了2个中间件Logger(), Recovery()
  15. r := gin.Default()
  16. // JSON绑定
  17. r.GET("/:user/:password", func(c *gin.Context) {
  18. // 声明接收的变量
  19. var login Login
  20. // Bind()默认解析并绑定form格式
  21. // 根据请求头中content-type自动推断
  22. if err := c.ShouldBindUri(&login); err != nil {
  23. c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  24. return
  25. }
  26. // 判断用户名密码是否正确
  27. if login.User != "root" || login.Pssword != "admin" {
  28. c.JSON(http.StatusBadRequest, gin.H{"status": "304"})
  29. return
  30. }
  31. c.JSON(http.StatusOK, gin.H{"status": "200"})
  32. })
  33. r.Run(":8000")
  34. }