curlでPOSTした時、@RequestBodyに値が入ってこない問題の対策

2022年4月14日IT,Java

問題の詳細

自作の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

まとめ

ちなみに描いてあるコードの動作確認はしていないので、動かなくても怒らないでください。

2022年4月14日IT,Java

Posted by raishin