Spring中如何接收Long类型请求参数?参数缺失报错求助
问题解决:Spring MVC参数绑定报错
MissingServletRequestParameterException 错误原因
你的URL传递的参数名是id(/board/detail?id=[board_num]),但Controller方法中@RequestParam指定的参数名是sequence,Spring MVC找不到名为sequence的请求参数,因此抛出该异常。Long类型本身完全支持通过@RequestParam绑定,你听到的说法是错误的。
解决方案
两种可行修改方式,二选一即可:
方式一:修改Controller的参数绑定名称
将@RequestParam的参数名改为id,与URL中的参数名匹配:
@GetMapping("/board/detail") public String detail(@RequestParam("id") Long sequence, Model model){ model.addAttribute("detail", boardService.detail(sequence)); return "detail"; }
Spring会自动将URL中id对应的字符串参数转换为Long类型,只要参数值是合法数字即可。
方式二:修改URL的参数名
将URL中的参数名改为sequence,与Controller中的绑定名称一致:
/board/detail?sequence=[board_num]
额外优化建议
- 若允许参数缺失,可设置
required=false避免直接返回400错误:
@RequestParam(value="id", required=false) Long sequence
- Service层中
findById(sequence).get()可能抛出NoSuchElementException,建议替换为更友好的异常处理:
public Board detail(Long sequence){ return boardRepository.findById(sequence) .orElseThrow(() -> new IllegalArgumentException("未找到编号为" + sequence + "的帖子")); }
内容的提问来源于stack exchange,提问作者hywon
相关产品推荐
相关产品推荐

