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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:50:31