-
-
Save konojunya/453fa1e5f84058fd8cb8d7c0122348e1 to your computer and use it in GitHub Desktop.
package main | |
import ( | |
"fmt" | |
"log" | |
"github.com/gin-gonic/gin" | |
) | |
type CreateParams struct { | |
Username string `json:"username"` | |
Guests []Person `json:"guests"` | |
RoomType string `json:"roomType"` | |
CheckinDate string `json:"checkinDate"` | |
CheckoutDate string `json:"checkoutDate"` | |
} | |
type Person struct { | |
Firstname string `json:"firstname"` | |
Lastname string `json:"lastname"` | |
} | |
func main() { | |
r := gin.Default() | |
r.POST("/", func(c *gin.Context) { | |
var createParams CreateParams | |
err := c.BindJSON(&createParams) | |
if err != nil { | |
log.Fatal(err) | |
} | |
fmt.Println(createParams) | |
}) | |
r.Run(":8000") | |
// request | |
// curl http://localhost:8000 -d @request.json | |
} |
{ | |
"guests": [ | |
{ | |
"firstname": "ryan", | |
"lastname": "vlaming" | |
} | |
], | |
"roomType": "suite", | |
"checkinDate": "2018-04-13T19:24:00+00:00", | |
"checkoutDate": "2018-07-13T19:24:00+00:00" | |
} |
@boddumanohar
I don't know because I haven't written Golang for about 2 years, but when I read the source code, c.BindJSON passes the HTTP status code 400 to the context and then returns a pointer or an error. Internally, the decoder of the json package I'm implementing using.
You can understand it by reading the following.
BindJSON: https://github.com/gin-gonic/gin/blob/e899771392ecf35de8ce10a030ed8fed2207e9cb/context.go#L608
context has 400 status code when if an error occurs
https://github.com/gin-gonic/gin/blob/e899771392ecf35de8ce10a030ed8fed2207e9cb/context.go#L647
decodeJSON: https://github.com/gin-gonic/gin/blob/e899771392ecf35de8ce10a030ed8fed2207e9cb/binding/json.go#L44
If you added 'required' tag in your struct, then in JsonBind you will receive an error
what's the difference between
c.BindJSON
andjson.Unmarshal
?