web-dev-qa-db-ja.com

最新のSpring v4では、オプションのボディで@RequestBodyを使用します

Springで_@RequestBody_注釈を使用するときに、REST AP​​I呼び出しで本文をオプションにするにはどうすればよいですか?

Springの最新バージョンでは、_@RequestBody_注釈を使用すると、クライアントはオプションにせずに常にbodyを送信します。

@RequestBody (required=false)を試しましたが、うまくいきませんでしたが、それでも私のリクエストはnullとして送られてきました。

ボディを必須にすることなく、要求を適切な必須オブジェクトに変換するにはどうすればよいですか?

例えば:

_@RequestMapping(value="/add/employee", method=RequestMethod.POST)
public void addEmployee(@RequestBody Employee employee){
    // ...
}
_

ここでは、POSTを使用しますが、ボディを使用しない従業員を追加します。それ、どうやったら出来るの?空の本文を送信すると、Springの最新バージョンでは「body missing」というエラーがスローされます...

27
Mike Powell

@Santosh、あなたが参照している必要な引数がどれなのかわかりません。マイクはすでに@RequestBody (required=false)を使用しようとしたが、リクエストはまだnullであると述べました。もっと詳しく説明して例を挙げてください。

@Mike、おそらくあなたの目的に合った別のコンバーターを用意することができます。

注:Spring v4.1.6で同じ問題が発生し、Mikeがそれを使用している可能性があることに気付きました。

37
Jack Dorson

バージョンに問題があったため、3.2以降のSpringバージョンを使用していると思います。 @ RequestBodyには、リクエスト本文をオプションにするための必須パラメーターが必要です

次のリンクをご覧ください Spring @RequestBody Anotation

@RequestBody本文は引数を取りますrequiredこれはデフォルトでtrueです。 falseに指定すると役立ちます

public abstractboolean required

本文コンテンツが必要かどうか。 デフォルトはtrue本文コンテンツがない場合は例外がスローされるです。本文のコンテンツがnullのときにnullを渡す場合は、これをfalseに切り替えます。

8
Santosh Joshi

Java.util.Optionalを使用できます:

@RequestMapping(value="/add/employee", method=RequestMethod.POST)
public void addEmployee(@RequestBody Optional<Employee> employee){
    // ...
}
2
cilf