Spring Boot访问页面时路径重复文件夹问题的排查与修复
问题分析与修复方案
问题场景
场景1:404路径重复错误
访问http://localhost:8080/admin/project_category/list时触发404,提示JSP文件路径/admin/project_category/admin/project_category/list.jsp不存在,但项目实际无重复文件夹结构。对应Controller代码:
@GetMapping("admin/project_category/list") public ModelAndView projectCategoryList() { List<Project> projectList = projectServiceImpl.get(); ModelAndView modelAndView = new ModelAndView("admin/project_category/list"); modelAndView.addObject("projectList", projectList); return modelAndView; }
场景2:添加斜杠后的500空指针错误
修改@GetMapping和ModelAndView路径为带斜杠的形式后:
@GetMapping("/admin/project_category/list") public ModelAndView projectCategoryList() { List<Project> projectList = projectServiceImpl.get(); ModelAndView modelAndView = new ModelAndView("/admin/project_category/list"); modelAndView.addObject("projectList", projectList); return modelAndView; }
触发500错误,报错信息:
There was an unexpected error (type=Internal Server Error, status=500).
Cannot invoke "java.util.List.iterator()" because "projectCategory" is null java.lang.NullPointerException: Cannot invoke "java.util.List.iterator()" because "projectCategory" is null
修复步骤
1. 解决404路径重复问题
- 强制
@GetMapping路径以斜杠开头:Spring MVC中,不带斜杠的请求路径会被当作相对路径处理,导致视图路径拼接重复,必须写成@GetMapping("/admin/project_category/list")。 - 核对视图解析器配置:检查项目的Spring MVC视图解析器(如
InternalResourceViewResolver)的前缀、后缀设置,确保ModelAndView中的路径能正确映射到实际JSP文件。例如:
如果配置了前缀/WEB-INF/views/、后缀.jsp,那么ModelAndView("/admin/project_category/list")会被解析为/WEB-INF/views/admin/project_category/list.jsp,要保证这个路径下存在对应的JSP文件。 - 统一视图路径写法:
ModelAndView中的视图路径不要重复前缀,确保和实际文件结构一致。
2. 解决500空指针问题
- 修正JSP变量名不匹配:报错显示
projectCategory为null,但Controller中传入的是projectList。找到JSP中迭代projectCategory的代码(比如<c:forEach items="${projectCategory}" ...>),将变量名改为projectList;或者在Controller中添加modelAndView.addObject("projectCategory", projectList);,保证前后端变量名一致。 - 处理Service层返回null的情况:检查
projectServiceImpl.get()是否可能返回null,建议在Controller中做判空处理,返回空List避免空指针:List<Project> projectList = Optional.ofNullable(projectServiceImpl.get()).orElse(Collections.emptyList());
3. 额外验证点
- 对比同类项目的视图解析器配置,确保当前项目的前缀、后缀设置与正常项目一致。
- 清理项目的编译目录(如
target或build文件夹),重新构建部署,避免缓存导致的路径异常。
内容的提问来源于stack exchange,提问作者invzbl3
相关产品推荐
相关产品推荐

