使用GIN框架返回状态代码400的Go rest API

vm0i2vca  于 2023-02-27  发布在  Go
关注(0)|答案(1)|浏览(284)

我尝试使用gin编写一个rest端点,它应该返回状态200。我也用同样的方式编写了它,但是得到的是状态400。我的代码如下:

router.POST("/parent", func(c *gin.Context) {
  var parent PARENT
  err := c.BindJSON(&parent)
  con,err := sql.Open("mysql", "myuser:mypass@/mydb")
  res,err := con.Exec(" insert into parent (username, mobile, email, password) values (?,?,?,?) ", parent.USERNAME, parent.MOBILE, parent.EMAIL, parent.PASSWORD)
  id,err := res.LastInsertId()
  if err != nil {
    con.Close()
  }
  c.JSON(200, gin.H{"success" : 1, "userid" : id})
  return
})

我经常在杜松子酒日志里看到这个:

[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 400 with 200

知道我错过了什么吗谢谢

mspsb9vt

mspsb9vt1#

可能是c.BindJSON()错误,因为输入无效(尝试添加一些日志消息,看看有什么问题),设置400状态并写入头文件。由于代码没有在那里终止(没有return),它继续到c.JSON(200, ...)并尝试用200覆盖已经写入的头文件。

err := c.BindJSON(&parent)
if err != nil {
    log.Println(err)
    return
}

相关问题