前言
本篇文章涉及到一下相关问题
1.报错Required String parameter 'xx' is not present
2.@RequestParam接收post请求参数报错
3.@RequestParam使用原理
4.springmvc使用@RequestParam一样的参数名,怎么接收不到。
5.axios发送post请求,springMVC接收不到数据问题
问题demo
@RequestMapping(method = RequestMethod.POST, value = "/test")
@ResponseBody
public ResponseEntity testDelete(@RequestParam("id") Integer id)
throws Exception {
return ResponseEntity.ok();
}
代码中是规定了请求方式POST,使用@RequestParam接收id参数。
然后前台请求参数也对,是这个形式的{id:111},看起来没错啊,参数名完全一样,但是后台报错Required String parameter 'id' is not present,说id参数必须传过来。
分析问题
虽然前端传递的参数形式为{id: 111}
,看起来id
的参数名确实是一样的,但是这个参数是作为请求的body而非作为普通参数或query parameter传递的。因此无法直接使用@RequestParam注释接收它。
SpringMVC后台接受不到POST请求数据 | 一锅乱炖
以及区别
HTTP请求中的form data和request payload的区别
HTTP请求中的Form Data与Request Payload的区别 · Issue #105 · kaola-fed/blog · GitHub
解决问题
正确的处理方式应该是在控制器方法中声明一个对象作为请求体,并添加@RequestBody注释进行注释,类似于以下示例:文章来源:https://www.toymoban.com/news/detail-421907.html
@RequestMapping(method = RequestMethod.POST, value = "/test")
@ResponseBody
public ResponseEntity testDelete(@RequestBody Map<String, Object> requestBody)
throws Exception {
Integer id = (Integer) requestBody.get("id");
// do something with id
return ResponseEntity.ok();
}
在这种情况下,我们将整个请求消息主体(即{id: 111}
)作为一个Map对象接收,并从中获取所需的id
值。通过这种方式,可以忽略掉请求参数名称是否匹配以及请求参数是否需要特殊处理等问题文章来源地址https://www.toymoban.com/news/detail-421907.html
到了这里,关于Spring MVC的@RequestParam分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!