报错信息
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配置,转化成参数接收对象或字段。文章来源:https://www.toymoban.com/news/detail-436784.html
如果在请求中指定contentType: 'application/json;charset=UTF-8’时会出现400错误文章来源地址https://www.toymoban.com/news/detail-436784.html
@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格局图
到了这里,关于org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!