带有@RequestParam和@RequestBody的Spring @GetMapping因HttpMessageNotReadableException而失败

Ily*_*iuk 4 spring http swagger spring-restcontroller

对端点的请求失败,并显示以下错误:

400错误请求org.springframework.http.converter.HttpMessageNotReadableException:缺少必需的请求正文

@GetMapping
public List<SomeObject> list(@RequestParam(required = false) String parameter, @RequestBody String body, @RequestHeader("Authorization") String token) {
.....
}
Run Code Online (Sandbox Code Playgroud)

如果@GetMapping会改变@PostMapping一切就像魅力一样.有什么想法到底是怎么回事?

注意: Swagger用于请求发送,因此错误不太可能在Curl中

更新: 所以,它看起来像春天不支持@RequestBody@GetMapping.我还是想不通为什么?@DeleteMapping@RequestBody工作正常,并根据HTTP/1.1 GET请求可能包含体- stackoverflow.com/questions/978061/http-get-with-request-body

IMO看起来有点不一致允许身体进入DELETE但禁止进入GET

Ked*_*shi 7

@RequestBody注释将带有注释变量的(POST/PUT)请求体中发送的内容绑定.由于GET请求中没有"body"部分,因此spring抛出HttpMessageNotReadableException来指示相同的内容.

作为一般规则,您只能@RequestBody用于具有"正文"内容的请求,例如POST或PUT.

  • 看看同一篇文章中的这一行 - **HTTP GET 和 HTTP POST 均可用于执行带正文的搜索。由于并非所有客户端都支持带有正文的 GET,因此也允许使用 POST。** 根据 HTTP 标准,带有正文的 GET 请求是不正确的。 (2认同)
  • 根据 HTTP/1.1 获取请求可以有 body 参见 -http://stackoverflow.com/questions/978061/http-get-with-request-body (2认同)