如何向SpringBoot控制器传递参数及解决空指针异常问题
问题根因
你出现空指针异常的核心原因是混淆了Spring MVC中Model对象的作用:Model是后端向返回的视图页面传递渲染数据的容器,不会存储前端请求携带的URL查询参数,你调用model.getAttribute("oper")会直接返回null,后续调用toString()方法就触发了空指针。
正确实现方案
前端的传参逻辑无需修改,仅调整控制器的参数接收规则即可,推荐使用@RequestParam注解直接绑定URL查询参数:
@RequestMapping(value = { "/programs" }, method = RequestMethod.GET) // 直接用@RequestParam注解绑定对应名称的查询参数,Spring会自动完成类型转换 public String ProgramsController(@RequestParam int oper, @RequestParam int page, Model model) throws ClassNotFoundException { programs cl=new programs(); switch (oper){ case 0://跳转至程序选择页 int all_pages=0; // 计算总页数 all_pages = cl.getSizePages(); struct_programs mas_result1=null; //if(all_pages>0)mas_result1=cl.getPrograms(lang, page); break; } return "programs"; }
可选优化
如果要避免参数未传递时出现报错,可以给参数设置默认值:
// required = false表示参数非必传,defaultValue设置参数缺失时的默认值 public String ProgramsController(@RequestParam(required = false, defaultValue = "0") int oper, @RequestParam(required = false, defaultValue = "1") int page, Model model)
内容的提问来源于stack exchange,提问作者Mikhail Grebenev
相关产品推荐
相关产品推荐

