Spring@GetMapping与@RequestParam和@RequestBody一起失败,出现HttpMessageNodeTableException

Spring@GetMapping与@RequestParam和@RequestBody一起失败,出现HttpMessageNodeTableException,spring,http,swagger,spring-restcontroller,Spring,Http,Swagger,Spring Restcontroller,对终结点的请求失败,出现以下错误: 400错误请求 org.springframework.http.converter.httpMessageNodeTableException: 缺少必需的请求正文 @GetMapping 公共列表列表(@RequestParam(required=false)字符串参数、@RequestBody字符串体、@RequestHeader(“授权”)字符串令牌){ ..... } 如果将@GetMapping更改为@PostMapping,那么一切都会像一个符

对终结点的请求失败,出现以下错误:

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

@GetMapping
公共列表列表(@RequestParam(required=false)字符串参数、@RequestBody字符串体、@RequestHeader(“授权”)字符串令牌){
.....
}
如果将
@GetMapping
更改为
@PostMapping
,那么一切都会像一个符咒一样工作。 知道到底发生了什么吗

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

更新: 因此,Spring似乎不支持
@GetMapping
@RequestBody
。我还是不明白为什么
@DeleteMapping
with
@RequestBody
工作正常,根据HTTP/1.1,GET请求可能包含body-stackoverflow.com/questions/978061/HTTP-GET-with-request-body


在我看来,在
DELETE
中允许body,但在
GET
@RequestBody
中禁止,这看起来有点不一致。注释将发送到(POST/PUT)请求正文中的内容与带注释的变量绑定。因为GET请求中没有“body”部分,所以spring抛出HttpMessageNodeReadableException以指示相同的内容


一般来说,您只能将
@RequestBody
用于包含“body”内容的请求,例如POST或PUT。

我今天在spring webmvc 5.1.5中遇到了类似问题,并检查了库代码。
httpmessageontradableexception
是从
RequestResponseBodyMethodProcessor.readWithMessageConverters
引发的,因为它调用了
readWithMessageConverters
并得到null。
readWithMessageConverters
中有一个循环,用于为请求内容类型搜索合适的转换器(
for(HttpMessageConverter:this.messageConverters)
),由于我没有在请求中指定和内容类型,因此失败


因此,我指定了标题
内容类型:application/json
,并解决了这个问题。

Hmmm。。。。但是GET也可以有body,spring允许使用RequestBody进行GetMapping查看这一行,在同一篇文章中,HTTP GET和HTTP POST都可以用于执行带有body的搜索。因为不是所有的客户端都支持GET with body,所以POST也是允许的。根据HTTP标准,带有主体的GET请求是不正确的。那么,重点是什么-Spring不支持用于GetMapping的RequestBody?GET请求可以根据HTTP/1.1具有主体请参见-没有编译错误,因为它是语法有效的Java代码。
@GetMapping
public List<SomeObject> list(@RequestParam(required = false) String parameter, @RequestBody String body, @RequestHeader("Authorization") String token) {
.....
}