🥫

【Go】ginのjson形式でのPostリクエストでtime型の項目を受け取れるか

2022/03/26に公開

概要

gin/golang gin-gonic does not parse time.Time properly for unix json?のstackoverflowの記事で、GOのフレームワークginで、jsonのPostリクエストにて、日付型の項目は受け取れないような記載がありました。formだと受け取れるようですが、jsonで受け取りたい場合はこちらのissueのコメントにある通り、別途unmarshal用の型を用意するべきと書いてあります。
ただ、記事が少し古いこともあり、2022年3月時点のバージョンv1.7.7ではどうかというのを、今回メモ書きします。

検証結果

v1.7.7であれば、jsonをtime型で受け取れました。
以下のように、リクエスト側はISO8601形式で日付が含まれるjson(日付の項目はsample_date)を投げます。なお、ISO8601形式の詳細については日付と時間の国際規格【ISO8601】を理解するの記事を参照ください。

{
  "title":"sampleTitle",
  "description":"sampleDetail",
  "sample_date":"2022-03-30T14:11:00.000Z"
}

受け取り側のginでは、以下のようにstructを定義しBindすればOKです。

type SamplePostRequest struct {
	Title       string    `json:"title" bson:"title"`
	Description string    `json:"description" bson:"description"`
	SampletDate time.Time `json:"sample_date" bson:"sample_date"`
}

なお、どのバージョンからOKなのは追えませんでしたが、こちらのコメントを見ると、2021年の2月時点以降のバージョンなら修正されているかなと思いました。

Discussion