エンドポイントへの要求は、次のエラーで失敗します。
400不正なリクエストorg.springframework.http.converter.HttpMessageNotReadableException:必要なリクエスト本文がありません
@GetMapping
public List<SomeObject> list(@RequestParam(required = false) String parameter, @RequestBody String body, @RequestHeader("Authorization") String token) {
.....
}
@GetMapping
が@PostMapping
に変更された場合でも、すべてが魅力のように機能します。一体何が起こっているのか考えはありますか?
注: Swaggerはリクエストの送信に使用されるため、エラーがCurlにある可能性はほとんどありません。
PDATE:したがって、Springは@RequestBody
に対して@GetMapping
をサポートしていないようです。私はまだ理由を理解できませんか? @DeleteMapping
with @RequestBody
は正常に機能し、HTTP/1.1によると、GETリクエストには本文が含まれる可能性があります--stackoverflow.com/questions/978061/http-get-with-request-body
IMO DELETE
で本文を許可するのは少し矛盾しているように見えますが、GET
では禁止しています
@RequestBody
アノテーションは、(POST/PUT)リクエスト本文で送信されたコンテンツをアノテーション付き変数にバインドします。 GETリクエストには「body」の部分がないため、Springは同じことを示すためにHttpMessageNotReadableExceptionをスローします。
原則として、「body」コンテンツを含むことができるリクエストには、@RequestBody
のみを使用できます。 POSTまたはPUT。
今日、spring-webmvc 5.1.5で同様の問題に遭遇し、ライブラリコードを確認しました。 HttpMessageNotReadableException
は、readWithMessageConverters
を呼び出してnullになったため、_RequestResponseBodyMethodProcessor.readWithMessageConverters
_からスローされました。リクエストContent-Type(for (HttpMessageConverter<?> converter : this.messageConverters)
)に適したコンバーターを検索するreadWithMessageConverters
にループがあり、リクエストでContent-Typeを指定しなかったため、失敗しました。
そこで、ヘッダー_Content-Type: application/json
_を指定して、問題を解決しました。