Home > Blockchain >  Go rest api using GIN Framework returning status code 400
Go rest api using GIN Framework returning status code 400

Time:05-13

I am trying to write a rest endpoint using gin which should return status 200. I have coded it as well in the same way, but am getting status 400. My code is as follows:

 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
        })

I am always getting this in gin logs:

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

Any idea what am I missing. Thanks

CodePudding user response:

Probably c.BindJSON() errors because of invalid input (try to add some log message there to see what's wrong) and that sets 400 status and writes headers. Since code does not terminate there (there's no return) it continues to c.JSON(200, ...) and tries to overwrite already written headers with 200.

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