@RequestBody 异常:Required request body is missing

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@RequestBody 异常:Required request body is missing相关的知识,希望对你有一定的参考价值。

参考技术A 异常的抛出点在RequestResponseBodyMethodProcessor的readWithMessageConverters方法,

而arg 的返回时在AbstractMessageConverterMethodArgumentResolver的readWithMessageConverters进行。

由于我们的ContenType是Json格式,因此由JsonConvert进行处理。而GET方法请求试没有传输body因此无法获取body信息。导出返回的body为null,因此抛出异常。

通过源码的分析我们得出。因为GET方法请求试没有传输body信息。导致Spring处理body的时候为null,抛出异常。只用我们将GET方法修改成POST方法即可访问。

SpringBoot使用@RequestBody 报错400 2019-10-26

参考技术A 大意就是请求被CORS策略阻止。

2019/10/27找到了原因:

    vue 发送json ,会导致此次请求被认为是一次复杂的请求,所以会发送两次请求(为什么会发送两次请自行查询 ),第一次不带任何数据,服务端口的@RequeseBody  会默认请求的数据为空时报错。

解决办法:

1    如上: 加上 required=false 参数,不检查数据是否为空

2 使用拦截器,通过request.getMethod(),得到请求方法,如果是OPTIONS 就直接返回,特别注意返回时要带上响应头以允许这次跨域访问(为什么要允许跨域访问自行查询)

以上是关于@RequestBody 异常:Required request body is missing的主要内容,如果未能解决你的问题,请参考以下文章

使用@RequestBody接收参数

使用与不适用@RequestBody注解的区别

springboot中@RequestBody和@ReponseBody获取参数

如何处理spring boot 2中@Requestbody中的对象抛出的异常

RequestBodyRequestPartRequestBody的区别

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