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

Spring项目Upvote按钮报Required parameter 'votes'缺失错误求助

Spring项目Upvote功能400 Bad Request错误原因及修复

问题现象

开发Java Spring项目时,Quote的编辑功能正常运行,但点击Upvote按钮尝试增加票数时,触发400 Bad Request错误,错误信息为Required parameter 'votes' is not present,对应异常org.springframework.web.bind.MissingServletRequestParameterException。

核心原因

  1. 前后端参数传递不匹配:
    投票接口VoteUp方法通过@RequestParam int votes声明必须接收votes参数,但前端的Upvote表单仅包含提交按钮,没有任何字段传递当前Quote的票数值,导致请求缺少必填参数,触发400错误。
  2. 冗余配置导致逻辑异常:
    VoteUp方法添加了@ResponseBody注解,但返回值是重定向字符串,这会让Spring直接把redirect:/profile作为响应内容返回,而非执行重定向逻辑,属于无效且错误的配置。

修复方案

方案一:前端传递票数(不推荐,存在篡改风险)

在Upvote表单中添加隐藏字段,传递当前Quote的票数:

<form th:action="'/profile/' + ${el.id} + '/upvote'" method="post"><br>
    <!-- 添加隐藏字段传递当前票数 -->
    <input type="hidden" th:value="${el.votes}" name="votes">
    <button class="btn btn-warning" type="submit">Upvote</button><br>
</form>

方案二:后端直接读取数据库票数(推荐,安全可靠)

移除对前端votes参数的依赖,直接从数据库查询当前Quote的票数并累加,避免前端篡改数据:

@PostMapping("/profile/{id}/upvote")
public String VoteUp(@PathVariable(value="id") long id) {
    Quote post = quoteRepository.findById(id).orElseThrow();
    // 直接从数据库查询的实体中获取当前票数并加1
    post.setVotes(post.getVotes() + 1);
    quoteRepository.save(post);
    return "redirect:/profile";
}

同时移除无用的@ResponseBody注解和Model model参数,确保重定向逻辑正常执行。

为什么编辑功能正常?

编辑接口的QuoteEdit方法同样需要votes参数,但编辑页面的表单(edit_quote.html)必然包含了传递当前票数的字段(如隐藏输入框或可编辑输入框),因此请求能携带完整参数,功能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:05:20