gin
gin copied to clipboard
ShouldBind does not go in error when content type is not defined
Description
The ShouldBind method does not return an error when the request is missing the 'Content-Type' header and payload is not provided. I would expect an error because the defined POST API requires a specific json payload in input. This expectation is correct? Or i am missing something? Thanks :)
How to reproduce
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
g := gin.Default()
g.POST("/hello", func(c *gin.Context) {
var body TestBody
err := c.ShouldBind(&body)
if err != nil {
c.Status(http.StatusBadRequest)
}
c.String(http.StatusOK, body.Msg)
})
err := g.Run(":9000")
if err != nil {
return
}
}
type TestBody struct {
Msg string `json:"msg"`
}
Expectations
$ curl -v http://localhost:9000/hello -X POST -d ''"
< HTTP/1.1 400 Bad request
Actual result
$ curl -v http://localhost:9000/hello -X POST -d ''"
HTTP/1.1 200 OK
Environment
- go version: 1.21.3
- gin version (or commit ref): v1.9.1
- operating system: Ubuntu
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
g := gin.Default()
g.POST("/hello", func(c *gin.Context) {
var body TestBody
err := c.ShouldBind(&body)
if err != nil {
c.Status(http.StatusBadRequest)
return
}
c.String(http.StatusOK, body.Msg)
})
err := g.Run(":9000")
if err != nil {
return
}
}
type TestBody struct {
Msg string `json:"msg" binding:"required"`
}
- because
c.String(http.StatusOK, body.Msg)coverc.Status(http.StatusBadRequest)always.