🌸

SpringでRequestのJSONのObjectへのmappingをoptionalにしたい

2021/03/31に公開

TL:DR;

@RequestBody(required = false) しましょう。

きっかけ

既に存在している API で JSON を受け取るように変更する必要があった。

Spring で Request の JSON を受け取るようにするには以下のように RequestBody で Annotation をしてあげると request の JSON を object に mapping してくれる。

public void example(@RequestBody SomeRequest request) { ... }

がしかし、この場合 request の body が JSON でない場合 400 エラーが発生してしまう。 (自分の環境ではなので、設定によって変わるかもしれないが詳しく追ってない)

下方互換を保つためにも必須には出来ないのでどうしたら良いか調べた。

解決方法

required = false option を使いましょう。

public void example(@RequestBody(required = false) SomeRequest request) { ... }

以上。

これだけっちゃこれだけなんだが、敢えてコメントするならば request body が JSON でない場合 object が null なので、その辺りのケアは忘れずにする必要がある。

調べれば他の記事も出てくるとは思いますが、自分の検索した時はなかなかヒットしなかったので備忘録がてら残しておく事にした。

Discussion