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 })
额外检查项
- 确认
Likes实体类存在对应构造函数:
public class Likes { private int boardNo; private int userNo; public Likes(int boardNo, int userNo) { this.boardNo = boardNo; this.userNo = userNo; } // 其他Getter、Setter }
- 补全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
相关产品推荐
相关产品推荐

