curlでPOSTした時、@RequestBodyに値が入ってこない問題の対策
問題の詳細
自作のAPIにcurlでPOSTを投げて動作確認しようとしたら
@RequestBodyをつけたBeanに値が入ってこなくて困った。
下記のようなController内のハンドラーメソッドとRequestBodyの中身になるデータクラスがあるとする。
@RequestMapping(value="me")
public HogeResponse crete(@RequestBody HogeBody body){
// 処理
}
@Getter
@Setter
public Class HogeBody{
@NotNull
private Long hogeId;
@NotNull
private Long hogeId2;
}
ローカルホストで起動している自作APIの上記ハンドラメソッドにPOSTをするcurlは下記のようになる。
curl -X POST -H "Content-Type: application/json" -d "{"hogeId" : 1 , "hogeId2" : 2}" http://localhost:8080/me
デバッグするとハンドラメソッドにはちゃんとリクエストが飛んできているが、
HogeBodyクラスのhogeIdとhogeId2は空になってしまう。
解決策
curlで指定しているプロパティ名をキャメルケース→スネークケースに変更することで、
@RequestBodyで指定したデータクラスに値が入ってくるようになった。
具体的には下記のようなcurlを投げれば良い。
hogeId → hoge_id のように修正している。
Java側の定義ではキャメルケースだが、curlで投げる際にはスネークケースにしないと駄目。
curl -X POST -H "Content-Type: application/json" -d "{"hoge_id" : 1 , "hoge_id2" : 2}" http://localhost:8080/me
まとめ
ちなみに描いてあるコードの動作確認はしていないので、動かなくても怒らないでください。
ディスカッション
コメント一覧
まだ、コメントがありません