API参数
- 可以通过Context的Param方法来获取API参数
- localhost:8000/xxx/zhangsan ```go package main
import ( “net/http” “strings”
"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”) }
<a name="RX63W"></a>#### URL参数- URL参数可以通过DefaultQuery()或Query()方法获取- DefaultQuery()若参数不存在,返回默认值,Query()若不存在,返回空串- API ? name=zs```gopackage mainimport ("fmt""net/http""github.com/gin-gonic/gin")func main() {r := gin.Default()r.GET("/user", func(c *gin.Context) {//指定默认值//http://localhost:8080/user 才会打印出来默认的值name := c.DefaultQuery("name", "枯藤")c.String(http.StatusOK, fmt.Sprintf("hello %s", name))})r.Run()}
表单参数
- 表单传输为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”
"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() }
<a name="uXbEu"></a>#### JSON数据解析和绑定```gopackage mainimport ("github.com/gin-gonic/gin""net/http")// 定义接收数据的结构体type Login struct {// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// JSON绑定r.POST("loginJSON", func(c *gin.Context) {// 声明接收的变量var json Login// 将request的body中的数据,自动按照json格式解析到结构体if err := c.ShouldBindJSON(&json); err != nil {// 返回错误信息// gin.H封装了生成json数据的工具c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}// 判断用户名密码是否正确if json.User != "root" || json.Pssword != "admin" {c.JSON(http.StatusBadRequest, gin.H{"status": "304"})return}c.JSON(http.StatusOK, gin.H{"status": "200"})})r.Run(":8000")}
表单数据解析和绑定
package mainimport ("net/http""github.com/gin-gonic/gin")// 定义接收数据的结构体type Login struct {// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// JSON绑定r.POST("/loginForm", func(c *gin.Context) {// 声明接收的变量var form Login// Bind()默认解析并绑定form格式// 根据请求头中content-type自动推断if err := c.Bind(&form); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}// 判断用户名密码是否正确if form.User != "root" || form.Pssword != "admin" {c.JSON(http.StatusBadRequest, gin.H{"status": "304"})return}c.JSON(http.StatusOK, gin.H{"status": "200"})})r.Run(":8000")}
URI数据解析和绑定
package mainimport ("net/http""github.com/gin-gonic/gin")// 定义接收数据的结构体type Login struct {// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`}func main() {// 1.创建路由// 默认使用了2个中间件Logger(), Recovery()r := gin.Default()// JSON绑定r.GET("/:user/:password", func(c *gin.Context) {// 声明接收的变量var login Login// Bind()默认解析并绑定form格式// 根据请求头中content-type自动推断if err := c.ShouldBindUri(&login); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}// 判断用户名密码是否正确if login.User != "root" || login.Pssword != "admin" {c.JSON(http.StatusBadRequest, gin.H{"status": "304"})return}c.JSON(http.StatusOK, gin.H{"status": "200"})})r.Run(":8000")}
