前端get请求为什么不能在body中传参

文章描述了一个前端在尝试调用一个需要RequestBody的GET接口时遇到的问题。由于浏览器的限制,GET请求的body在xhr中会被忽略,导致参数丢失并返回500错误。Postman因使用fetch通信,可以处理这种情况。解决方案是将接口修改为接受application/x-www-form-urlencoded类型的参数。

一、问题描述

  1. 公司后端小伙伴写了这样一个接口:请求类型为application/json的get接口,然后我按照平时调接口的方式调接口,发现报500了
    在这里插入图片描述

  2. 在doc.html中试了一下,也发现报500
    在这里插入图片描述

  3. 但后端小伙伴使用postman请求竟然是好的
    在这里插入图片描述

  4. 后来发现他将参数放在了body中,于是我将前端get请求参数也放在body中,继续调接口发现我传在data里面的参数在浏览器中丢失了

getToBody(path: string, params?: IObject, headers?: IObject): Promise<IHttpResponse> {
    return new Promise((resolve, reject) => {
      http({
        url: path,
        data: params,
        headers,
        method: "GET"
      })
        .then(resolve)
        .catch((error) => {
          if (error !== "-999") {
            reject(error);
          }
        });
    });
  },

二、查找原因

后端接口报错了,报错主要原因是org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing(缺少必须的请求正文),于是在网上找了找这个问题的原因,发现是后端在controller加了@RequestBody这个注解,所以请求参数必须要放在body中,可是我使用doc.html时,他会将get的参数自动放到path上,后来查找原因才发现
(在浏览器环境下是基于xhr通信的axios),xhr的请求方式如果是GET或者HEAD,会忽略body,将其设置为null,所以在浏览器环境下不能在GET请求的body中传参。而postman是基于fetch通信的,所以它的get请求是可以在body中传参的
在这里插入图片描述

三、解决方式

让后端将请求类型改为application/x-www-form-urlencoded

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值