Last active
November 21, 2022 09:54
-
-
Save konojunya/453fa1e5f84058fd8cb8d7c0122348e1 to your computer and use it in GitHub Desktop.
Sample using gin's BindJSON
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"guests": [ | |
{ | |
"firstname": "ryan", | |
"lastname": "vlaming" | |
} | |
], | |
"roomType": "suite", | |
"checkinDate": "2018-04-13T19:24:00+00:00", | |
"checkoutDate": "2018-07-13T19:24:00+00:00" | |
} |
If you added 'required' tag in your struct, then in JsonBind you will receive an error
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@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