Golang 版本为 1.21.4,Gin 版本 1.9.1,记录的接收方法仅针对使用请求体发送的 JSON 数据。
使用 map interface 接收数据
需要注意的是接收之后的 key 的访问需要在常规 map 访问方式之后添加 .({type}),否则出错。
// createTodo 方法添加一条新的数据
func createTodo(c *gin.Context) {
body := make(map[string]interface{})
if err := c.ShouldBindJSON(&body); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
completed, _ := strconv.Atoi(body["completed"].(string))
todo := todoModel{Title: body["title"].(string), Completed: completed}
// ...
c.JSON(http.StatusCreated, gin.H{"status": http.StatusCreated, "message": "Todo item created successfully!", "resourceId": todo.ID})
}
使用自定义实体接收数据
需要保证 JSON 中发送的类型与实体中定义类型一致,使用 Int 接收 string 类型则会出错。
// createTodo 方法添加一条新的数据
func createTodo(c *gin.Context) {
var todo todoModel
if err := c.ShouldBindJSON(&todo); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
// ...
c.JSON(http.StatusCreated, gin.H{"status": http.StatusCreated, "message": "Todo item created successfully!", "resourceId": todo.ID})
}