post方法传递一个参数后端不能接收

1. 背景

  • 写一个普通的post方法接口时,使用swagger测试接口无误。与前端对接时,出现传递参数为null的问题。
//这是接口方法
	@PostMapping(value = "/getValue")
    @ApiOperation("设置值")
    public Object getValue(Integer value) {
       ......
    }
//js代码
postValue: data => {
    return request({
      url: '/.../getValue',
      method: 'post',
      data
    })

查看前端发现传递参数为:

{"value" : "-1"}

2. 过程

    1. 使用swagger自测 返回结果符合预测结果
    1. 使用postman自测 返回结果报参数为null的错误
  • 发现原因是前端不能将参数传递后端。查阅资料,总共有以下几种可能
    • 1、没有使用RequestParam、RequestBody注解
    • 2、不能接收Integer类型,只能接收String类型数据
    • 3、前端传递方式不对

一一尝试之后出现以下情况:

  • 对于第一种情况
    使用RequestParam、RequestBody时出现报错500 并出现:Required String parameter ‘param‘ is not present 。这种问题很少出现,一般是报400。百度后解决方案是将RequestParam注解后加Required = false。但是后端必须要这个参数,所以不可行,pass。
  • 对于第二种情况:
    查阅资料可以发现与数据类型无关
  • 对于第三种情况:
    • 将前端改成下面的形式,可以正常运行,但是参数是在url中的
postValue: data => {
    return request({
      url: '/.../getValue',
      method: 'post',
      params:{
        'value':data
      }
    })

前端提出post方法不能 将参数放在url中。再次查阅资料发现:后端使用post方法接收单个参数时,前端只能使用FormData格式或x-www-form-urlencoded格式来传递数据,不能使用json传递数据。

3. 原因

后端使用post方法接收单个参数时,前端使用json传递数据会接收不到,只能使用formdata或x-www-form-urlencoded传递数据

4. 解决方案

  • 实际解决方法有很多种,本次只是记录post方法接收单个参数出现后端接收不到问题。
    如:
  • 使用get方法接收参数
  • 接收以JSON传输的字符串,即以字符串的方式接收该数据,然后用JSON解析
  • 以及本次的解决方案:使用formdata传输数据;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值