IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing -> 正文阅读

[网络协议]org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing

报错信息

org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public cn.hp.util.Result cn.hp.controller.ValidateCode.sendSMS(java.lang.String)

控制台输出的是缺少必须的请求正文
发现从前端 走的请求 携带一个参数 到后端没有接收到

前端代码

  axios.post("http://127.0.0.1:8080/validateCode/send4Order/" + telephone).then(res => {}

后端代码

//发送验证码
@RestController
@RequestMapping("/validateCode")
public class ValidateCode {

    @PostMapping(value = "/send4Order/{telephone}")
 public Result sendSMS(@RequestBody String telephone) {

 }

原因:
报错时:后台代码使用@RequestBody 注解报错i 前端发送请求,没有进这个controller
把@RequestBody 换成 @PathVariable 就好了

@RestController
@RequestMapping("/validateCode")
public class ValidateCode {

    @PostMapping(value = "/send4Order/{telephone}")
     public Result sendSMS(@PathVariable String telephone) {
     
     }

@RequestBody

注解@RequestBody接收的参数是来自requestBody中,即请求体。

主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)

最常用的请求体传参是POST请求,所以使用@RequestBody接收数据时,一般都用POST方式进行提交。

请求方式

  • GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
  • POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,

@RequestParam

注解@RequestParam接收的参数是来自requestHeader中,即请求头。

接收的参数是来自HTTP请求体或请求url的QueryString中。

RequestParam可以接受简单类型的属性,也可以接受对象类型。

实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。

如果在请求中指定contentType: 'application/json;charset=UTF-8’时会出现400错误

@RequestParam有三个配置参数:

  • required 表示是否必须,默认为 true,必须。
  • defaultValue 可设置请求参数的默认值。
  • value 为接收url的参数名(相当于key值)。

区别

  • 在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用
  • @RequestBody最多只能有一个,而@RequestParam()可以有多个。

总结

  • 在GET请求中,不能使用@RequestBody。
  • 在POST请求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,对于参数转化的配置必须统一。
  • 如果使用@RequestParam来接受参数,可以在接受参数的model中设置@DateFormat指定所需要接受时间参数的格式。
  • 在使用@RequestParam,不能指定contentType: ‘application/json; charset=UTF-8’
  • 另外,使用@RequestBody接受的参数是不会被Servlet转化统一放在request对象的Param参数集中,@RequestParam是可以的。
  • 一般情况下,推荐使用@RequestParam注解来接受Http请求参数。

POST请求时

  • @RequestBody --> JSON字符串部分
  • @RequestParam --> 请求参数部分
  • application/json格局图
  • form-data、x-www-form-urlencoded格局图
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 15:00:59  更:2021-09-22 15:01:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/21 6:51:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码