POSTなどの際、JSONの形式をチェックしつつも、bodyの指定は任意とする方法【Go】
POSTでbodyの入力を任意としたいけど、JSONの形式がちゃんとあっているかエラーハンドリングしたい場合。
func decodeJSON(r *http.Request, dst interface{}) error { dec := json.NewDecoder(r.Body) return dec.Decode(dst) } create(w http.ResponseWriter, r *http.Request) { if err := decodeJSON(r, ¶m); err != nil && err != io.EOF { // エラーハンドリング return } // 何かしらの処理 }
ポイントは、decodeJSONが返す、JSON形式のエラーチェックの他に、io.EOFのエラーでないことをチェックしている点です。
io.EOFは、内容の終端でないかをチェックするものですが、このエラーの場合、bodyが指定されていないことになります。
そのエラーではないことを確認することで、bodyの指定を任意とすることができるのです。