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

Spring Boot中BoardController获取userNo参数失败问题求助

解决Spring Boot控制器无法获取userNo参数的问题

错误核心原因

报错Required request parameter 'userNo' for method parameter type int is not present本质是:

  • 前端未正确传递userNo参数,或传参方式与控制器@RequestParam的参数读取规则不匹配
  • @RequestParam默认要求参数必填,若前端未传或传参位置错误,直接触发该异常

具体解决方案

1. 修正前端传参方式

如果前端通过URL参数或表单提交传递数据,必须保证参数名严格为userNo:

  • URL示例:POST /increaseLike?boardNo=1&userNo=1001
  • 表单提交示例:
    <form method="post" action="/increaseLike">
      <input type="hidden" name="boardNo" value="1">
      <input type="hidden" name="userNo" value="1001">
      <button type="submit">点赞/取消</button>
    </form>
    
  • AJAX/axios请求(需用params传递,而非请求体):
    axios.post('/increaseLike', null, {
      params: {
        boardNo: 1,
        userNo: 1001
      }
    })
    

2. 调整控制器参数注解(可选)

如果需要兼容未登录场景(允许userNo非必填),可以给@RequestParam添加required=false,并处理空值:

@PostMapping("/increaseLike")
@ResponseBody
public Map<String, Object> increaseLike(@RequestParam("boardNo") int boardNo, 
                                        @RequestParam(value = "userNo", required = false) Integer userNo) throws Exception {
    if (userNo == null) {
        Map<String, Object> errorResponse = new HashMap<>();
        errorResponse.put("code", 401);
        errorResponse.put("msg", "请先登录");
        return errorResponse;
    }
    boolean isLiked = likesService.toggleLike(boardNo, userNo);
    int likeCount = likesService.countLikesByBoard(boardNo);

    Map<String, Object> response = new HashMap<>();
    response.put("likeCount", likeCount);
    response.put("isLiked", isLiked); 
    return response;
}

3. 推荐:用DTO统一接收请求参数(更规范)

如果前端习惯用JSON格式传递请求体,建议创建DTO类,用@RequestBody接收,避免参数分散:

  • 第一步:创建请求DTO
public class LikeToggleRequest {
    private int boardNo;
    private int userNo;

    // Getter、Setter
    public int getBoardNo() { return boardNo; }
    public void setBoardNo(int boardNo) { this.boardNo = boardNo; }
    public int getUserNo() { return userNo; }
    public void setUserNo(int userNo) { this.userNo = userNo; }
}
  • 第二步:修改控制器方法
@PostMapping("/increaseLike")
@ResponseBody
public Map<String, Object> increaseLike(@RequestBody LikeToggleRequest request) throws Exception {
    boolean isLiked = likesService.toggleLike(request.getBoardNo(), request.getUserNo());
    int likeCount = likesService.countLikesByBoard(request.getBoardNo());

    Map<String, Object> response = new HashMap<>();
    response.put("likeCount", likeCount);
    response.put("isLiked", isLiked); 
    return response;
}
  • 前端JSON请求示例:
axios.post('/increaseLike', {
    boardNo: 1,
    userNo: 1001
})

额外检查项

  1. 确认Likes实体类存在对应构造函数:
public class Likes {
    private int boardNo;
    private int userNo;

    public Likes(int boardNo, int userNo) {
        this.boardNo = boardNo;
        this.userNo = userNo;
    }
    // 其他Getter、Setter
}
  1. 补全MyBatis的deleteLikeXML配置:
<delete id="deleteLike" parameterType="moum.project.vo.Likes">
    DELETE FROM likes WHERE board_id = #{boardNo} AND user_id = #{userNo}
</delete>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:45:02