axios发送post请求后端接收时的注意事项及@RequestBody,@RequestParam的区别

本文详细解析了在使用Vue.js结合Axios进行后端请求时,如何正确传递参数,特别是解决axios发送JSON格式参数与后端接收的问题。同时,对比分析了@RequestBody与@RequestParam等注解在Spring MVC中的作用与区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起因: 在学习vue.js的时候,利用axios向后台发送请求:

load: function (val) {
                axios
                    .post('/gms/shopNewVmiGoods/getShopNewVmiGoods',
                        {
                            pageSize: this.pageSize,
                            pageIndex: val,
                            gidOrName: this.gidOrName
                            

                    })
                    .then(response => (console.log(response)))
                    .catch(function(error){
                        console.log(error);
                    })
            }

后端在用controller接收这三个参数时,发现接收不到参数。后端接收的代码如下:

  @RequestMapping(value = "/getShopNewVmiGoods")
    @ResponseBody
    public PageResult getShopNewVmiGoods(HttpServletRequest request , Integer pageIndex , Integer pageSize , String gidOrName) {
        List<Long> departmentIdList = getDepartment(request);
        return shopNewVmiGoodsBusiness.getShopVmiGoodsListByGidOrName(gidOrName,departmentIdList,pageIndex,pageSize);
    }

查询后,发现,在axios发送post请求时,会自动将携带的参数转化为json格式,放到Body中,因此后端接收时也必须接收json格式。
参考资料:

https://www.cnblogs.com/yiyi17/p/9409249.html

由此引出第二个问题:@RequestBody 与 @RequestParam等注解的区别:
首先,类似与@RequestBody这种后端用来接收参数的注解主要有如下几个:

  • @PathVariable
  • @RequestHeader
  • @CookieValue
  • @RequestParam
  • @RequestBody
  • @SessionAttributes
  • @ModelAttribute

下面开始逐个解释这些注解

  1. @PathVariable:这个注解主要用于接收请求路径中占位符的值,示例如下,可以将url中的占位符(/{xxx})绑定到形参上。
@PathVariable("xxx")
通过 @PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable(“xxx“) 

@RequestMapping(value=”user/{id}/{name})
  1. @RequestHeader:此注解主要用于获取请求header中的信息,例如编码方式等等。例如:
public void query( @RequestHeader(value="Accept-Encoding",defaultValue="UTF-8") String encoding, @RequestHeader("Keep-Alive") long keepAlive)  {  

}  
  1. @CookieValue:@CookieValue用于将Cookie中的参数绑定到形参上,用法如下:

@Controller
public class HelloWorldController {
	@RequestMapping("/cookieValueTest")
	public void cookieValueTest(@CookieValue(value="JSESSIONID")String sessionId) {

	}
}
  1. @RequestParam和@RequestBody:这两个注解是最常用的,两者的区别为:
    @RequestBody可以将请求体中的参数绑定到相应的形参上(注意:@RequestBody会一次将所有的Body参数全部拿出来,也就是说形参中只能出现一次@RequestBody,如果有多个参数,可以把他们包裹在一个大的参数中);

    @RequestParam用来处理Content-Type: 为 application/x-www-form-urlencoded编码(默认编码)的内容或者header内的参数,可以出现多个。

  2. @SessionAttributes
    若希望在多个请求之间共用某个模型属性数据,则可以在
    控制器类上标注一个 @SessionAttributes, Spring MVC
    将在模型中对应的属性暂存到 HttpSession 中。

  3. @ModelAttribute
    此注解可以访问模型中的属性,如果不存在模型,会自动实例化一个模型,如果请求中与字段有名称匹配的值,会将请求参数绑定到这个模型对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值