You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot接收Vue axios POST单值时提示testparam参数不存在问题求助

问题原因

axios发送POST请求时默认会把传入的对象参数序列化为JSON格式放到请求体中,请求头Content-Type默认为application/json;而Spring Boot中@RequestParam注解只能获取URL拼接的查询参数、以及Content-Type为application/x-www-form-urlencoded或multipart/form-data格式的表单参数,无法从JSON请求体中读取参数,因此会抛出参数不存在的错误。

解决方案

方案1:调整前端传参逻辑,适配后端@RequestParam接收

有两种常用的实现方式:

方式1:将参数放到URL查询参数中

调用axios时将参数放到params配置项中,参数会自动拼接在请求URL后:

axios
    .post("url/test", {}, {
        params: {
            testparam: 1
        }
    })
    .then((response) => {
        console.log(response.data);
    })
    .catch((error) => {
        console.log(error.message);
    });

方式2:序列化为表单格式提交

使用FormData封装参数,或者用qs库序列化对象,请求会自动适配为@RequestParam可识别的表单格式:

// 方法A:使用FormData
const formData = new FormData();
formData.append('testparam', 1);
axios.post("url/test", formData)

// 方法B:使用qs序列化(需先安装qs库)
import qs from 'qs'
axios.post("url/test", qs.stringify({testparam: 1}))

方案2:调整后端接口逻辑,适配前端JSON传参

使用@RequestBody注解接收JSON格式的请求体:

方式1:用Map接收单个参数

@PostMapping(path = "/test")
@ResponseBody
public Integer test1(@RequestBody Map<String, Object> param) {
    Integer testparam = (Integer) param.get("testparam");
    System.out.println(testparam);
    return testparam;
}

方式2:封装DTO实体类接收(参数较多时更推荐)

先定义参数接收类:

// 需引入lombok的@Data注解,也可手动写getter/setter
@Data
public class TestParamDTO {
    private Integer testparam;
}

接口修改为:

@PostMapping(path = "/test")
@ResponseBody
public Integer test1(@RequestBody TestParamDTO dto) {
    Integer testparam = dto.getTestparam();
    System.out.println(testparam);
    return testparam;
}

内容的提问来源于stack exchange,提问作者CodeName

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:39:03