Go net/http
handler接收POST請求的JSON中的日期時間字串並轉為time.Time
範例。
範例環境:
- Go 1.17
範例
使用json.Decoder.Decode()
把http.Request.Body
的JSON轉為Employee
struct。Employee.CreatedAt
型態為time.Time
用來接收日期時間。
main.go
package main
import (
"encoding/json"
"fmt"
"net/http"
"time"
)
type Employee struct {
Id int
Name string
Age int
CreatedAt time.Time
}
func main() {
http.HandleFunc("/employee", func(rw http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodPost:
var emp Employee
if err := json.NewDecoder(r.Body).Decode(&emp); err != nil {
panic(err)
}
fmt.Println(emp)
json.NewEncoder(rw).Encode(emp)
default:
http.Error(rw, "Method not allowed", http.StatusMethodNotAllowed)
}
})
http.ListenAndServe(":8080", nil)
}
Client發送請求的JSON字串如下。特別注意日期時間格式必須是RFC3339格式:
yyyy-MM-ddThh:mm:ssZ
- e.g.2022-01-19T18:30:15Z
yyyy-MM-ddThh:mm:ss±hh:mm
- e.g.2022-01-19T18:30:15+00:00
{
"id": 1,
"name": "john",
"age": 33,
"createdAt": "2022-01-19T18:30:15Z"
}
RFC3339格式日期與時間皆不可省略,兩者以大寫T
隔開;後綴Z
為"Zulu"的縮寫,代表UTC位移時間00:00
,所以轉換的time.Time
為UTC時間。
若日期和時間中間沒有加T
會出現錯誤:
parsing time "\"2022-01-19 18:30:15Z\"" as "\"2006-01-02T15:04:05Z07:00\"": cannot parse " 18:30:15Z\"" as "T"
。
若後綴沒有加Z
會出現錯誤:
parsing time "\"2022-01-19T18:30:15\"" as "\"2006-01-02T15:04:05Z07:00\"": cannot parse "\"" as "Z07:00
。
測試
啟動應用程式後在命令列以cURL發出以下請求。
$ curl -X POST "http://localhost:8080/employee" -H 'content-type: application/json' -d '{"id": 1, "name": "john", "age": 33, "createdAt": "2022-01-19T18:30:15Z"}'
在console印出以下。
{1 john 33 2022-01-19 18:30:15 +0000 UTC}
沒有留言:
張貼留言