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の指定を任意とすることができるのです。