












POST 方法能提交 @RequestParam 类型的参数,以及在 Vue3 中如何实现这种前端请求,核心是搞懂 POST + @RequestParam 的适配方式和前端具体代码写法。
POST 方法完全可以提交 @RequestParam 参数!
@RequestParam 本质是接收「URL 查询参数」或「表单键值对参数」,和请求方法(GET/POST)无关 —— 只要前端按对应格式传参,POST 方法一样能被 @RequestParam 解析。
application/x-www-form-urlencoded)这是最标准的方式,对应服务端 @RequestParam 接收,也是你之前登录接口的适配方式。
<template>
<div>
<input v-model="username" placeholder="用户名" />
<input v-model="password" type="password" placeholder="密码" />
<button @click="login">登录</button>
</div>
</template>
<script setup>
import axios from 'axios';
import { ref } from 'vue';
// 定义参数
const username = ref('');
const password = ref('');
// 登录请求(POST + 表单格式参数)
const login = async () => {
try {
// 1. 构造表单参数(键值对)
const params = new URLSearchParams();
params.append('username', username.value);
params.append('password', password.value);
// 2. 发送POST请求
const res = await axios.post(
'/login', // 请求地址
params, // 请求体(表单格式)
{
// 关键:设置Content-Type为表单格式
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}
);
console.log('登录成功', res.data);
} catch (err) {
console.error('登录失败', err);
}
};
</script>
如果参数多,可借助 qs 库(需先安装:npm install qs):
import qs from 'qs';
// 替换上述 params 部分
const data = {
username: username.value,
password: password.value
};
// qs.stringify 会把对象转成 "username=admin&password=123456" 格式
const res = await axios.post('/login', qs.stringify(data), {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
@RequestParam 也能接收 URL 后的查询参数,POST 方法同样支持这种方式(但不推荐传密码等敏感信息)。
const login = async () => {
try {
const res = await axios.post(
'/login', // 请求地址
{}, // POST请求体为空
{
// 参数拼在URL后(?username=xxx&password=xxx)
params: {
username: username.value,
password: password.value
}
}
);
console.log('登录成功', res.data);
} catch (err) {
console.error('登录失败', err);
}
};
@PostMapping("/login")
public Result<String> login(
@RequestParam String username,
@RequestParam String password) {
// 业务逻辑...
return Result.success("登录成功", token);
}
| 方式 | Content-Type | 参数位置 | 适用场景 |
|---|---|---|---|
| 方式 1(表单) | application/x-www-form-urlencoded | 请求体 | 普通业务参数(推荐,支持敏感信息) |
| 方式 2(查询参数) | 无(默认) | URL 后缀 | 非敏感、简单参数(不推荐传密码) |
Content-Type: application/x-www-form-urlencoded,否则服务端无法解析;axios.post('/login', {username, password}))—— 此时 Content-Type 是 application/json,服务端 @RequestParam 会解析失败;@RequestParam 参数,核心是前端传参格式匹配;@RequestParam 代码,保持原有写法即可;此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。