Spring MVC的@RequestParam分析

前言

本篇文章涉及到一下相关问题

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注释进行注释,类似于以下示例:

@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值。通过这种方式,可以忽略掉请求参数名称是否匹配以及请求参数是否需要特殊处理等问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值