解决从JavaScript向Spring Boot控制器发送GET请求的400错误
解决Spring Boot GET请求参数缺失导致的400 Bad Request错误
你遇到的400错误和MissingServletRequestParameterException警告,核心原因是GET请求的参数传递方式错误:你的Spring控制器通过@RequestParam接收URL查询参数,但前端JS代码把参数放在了请求体中,且未实际发送这些参数——GET请求通常不通过请求体传递参数,Spring也不会解析GET请求体里的内容来填充@RequestParam。
修正JavaScript代码(正确传递GET查询参数)
GET请求的参数需要拼接到URL的查询字符串中(格式为?key1=value1&key2=value2...),推荐用URLSearchParams便捷构造参数:
var xhr = new XMLHttpRequest(); // 构造查询参数 var params = new URLSearchParams(); params.append('first_operand', String(first_val)); params.append('operator', String(operator)); params.append('second_operand', String(second_val)); // 将参数拼接到请求URL后 xhr.open("GET", `http://localhost:8080/workout/expression?${params.toString()}`); xhr.setRequestHeader("Accept", "application/json"); // GET请求无请求体,无需设置Content-Type为application/json,可删除该行 // xhr.setRequestHeader("Content-Type", "application/json"); xhr.onload = () => console.log(xhr.responseText); // GET请求直接send()即可,无需传入data xhr.send();
额外注意事项
- 若前端页面与后端不在同一端口(比如前端跑在3000端口、后端在8080),需修改
@CrossOrigin的origins为前端地址,例如@CrossOrigin(origins="http://localhost:3000/"),否则会触发跨域问题。 - 确保JS代码中的
first_val、operator、second_val变量已正确赋值,避免传递空参数。
内容的提问来源于stack exchange,提问作者Mostafa M. Galal
相关产品推荐
相关产品推荐

