報(bào)錯(cuò)信息
org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public cn.hp.util.Result cn.hp.controller.ValidateCode.sendSMS(java.lang.String)
控制臺(tái)輸出的是缺少必須的請(qǐng)求正文
發(fā)現(xiàn)從前端 走的請(qǐng)求 攜帶一個(gè)參數(shù) 到后端沒(méi)有接收到
前端代碼
axios.post("http://127.0.0.1:8080/validateCode/send4Order/" + telephone).then(res => {}
后端代碼
//發(fā)送驗(yàn)證碼
@RestController
@RequestMapping("/validateCode")
public class ValidateCode {
@PostMapping(value = "/send4Order/{telephone}")
public Result sendSMS(@RequestBody String telephone) {
}
原因:
報(bào)錯(cuò)時(shí):后臺(tái)代碼使用@RequestBody 注解報(bào)錯(cuò)i 前端發(fā)送請(qǐng)求,沒(méi)有進(jìn)這個(gè)controller
把@RequestBody 換成 @PathVariable 就好了
@RestController
@RequestMapping("/validateCode")
public class ValidateCode {
@PostMapping(value = "/send4Order/{telephone}")
public Result sendSMS(@PathVariable String telephone) {
}
@RequestBody
注解@RequestBody接收的參數(shù)是來(lái)自requestBody中,即請(qǐng)求體。
主要用來(lái)接收前端傳遞給后端的json字符串中的數(shù)據(jù)的(請(qǐng)求體中的數(shù)據(jù)的)
最常用的請(qǐng)求體傳參是POST請(qǐng)求,所以使用@RequestBody接收數(shù)據(jù)時(shí),一般都用POST方式進(jìn)行提交。
請(qǐng)求方式
- GET請(qǐng)求中,因?yàn)闆](méi)有HttpEntity,所以@RequestBody并不適用。
- POST請(qǐng)求中,通過(guò)HttpEntity傳遞的參數(shù),必須要在請(qǐng)求頭中聲明數(shù)據(jù)的類型Content-Type,
@RequestParam
注解@RequestParam接收的參數(shù)是來(lái)自requestHeader中,即請(qǐng)求頭。
接收的參數(shù)是來(lái)自HTTP請(qǐng)求體或請(qǐng)求url的QueryString中。
RequestParam可以接受簡(jiǎn)單類型的屬性,也可以接受對(duì)象類型。
實(shí)質(zhì)是將Request.getParameter() 中的Key-Value參數(shù)Map利用Spring的轉(zhuǎn)化機(jī)制ConversionService配置,轉(zhuǎn)化成參數(shù)接收對(duì)象或字段。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-436784.html
如果在請(qǐng)求中指定contentType: 'application/json;charset=UTF-8’時(shí)會(huì)出現(xiàn)400錯(cuò)誤文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-436784.html
@RequestParam有三個(gè)配置參數(shù):
- required 表示是否必須,默認(rèn)為 true,必須。
- defaultValue 可設(shè)置請(qǐng)求參數(shù)的默認(rèn)值。
- value 為接收url的參數(shù)名(相當(dāng)于key值)。
區(qū)別
- 在后端的同一個(gè)接收方法里,@RequestBody與@RequestParam()可以同時(shí)使用
- @RequestBody最多只能有一個(gè),而@RequestParam()可以有多個(gè)。
總結(jié)
- 在GET請(qǐng)求中,不能使用@RequestBody。
- 在POST請(qǐng)求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,對(duì)于參數(shù)轉(zhuǎn)化的配置必須統(tǒng)一。
- 如果使用@RequestParam來(lái)接受參數(shù),可以在接受參數(shù)的model中設(shè)置@DateFormat指定所需要接受時(shí)間參數(shù)的格式。
- 在使用@RequestParam,不能指定contentType: ‘a(chǎn)pplication/json; charset=UTF-8’
- 另外,使用@RequestBody接受的參數(shù)是不會(huì)被Servlet轉(zhuǎn)化統(tǒng)一放在request對(duì)象的Param參數(shù)集中,@RequestParam是可以的。
- 一般情況下,推薦使用@RequestParam注解來(lái)接受Http請(qǐng)求參數(shù)。
POST請(qǐng)求時(shí)
- @RequestBody --> JSON字符串部分
- @RequestParam --> 請(qǐng)求參數(shù)部分
- application/json格局圖
- form-data、x-www-form-urlencoded格局圖
到了這里,關(guān)于org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!