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

Spring集成JasperReport访问首页报class path资源不存在错误如何解决

问题根因

你当前ReporteController的@RequestMapping("/{reportName}")会匹配根路径下所有单层路径请求。当你访问http://localhost:8080/时,Spring默认会转发请求到/index.html,这个路径会被该控制器拦截,reportName被赋值为index.html,因此代码会尝试加载不存在的reportes/index.html.jasper文件,触发报错。

解决方案
  • 方案1(最推荐):给报表接口新增统一前缀,避免和静态资源路径冲突。将控制器的请求映射调整如下,修改后报表访问地址为http://localhost:8080/report/ListadoAlumno,完全隔离报表接口和其他资源的路径:
// 修改前
@RequestMapping("/{reportName}")
// 修改后
@RequestMapping("/report/{reportName}")
  • 方案2:给PathVariable增加正则匹配限制,只匹配符合报表命名规则的路径。如果你的报表名都是纯字母数字,可将请求映射改为以下格式,包含特殊字符(比如.html中的点)的路径就不会被该控制器拦截,会正常走静态资源处理器加载index.html:
@RequestMapping("/{reportName:[a-zA-Z0-9]+}")
  • 额外优化:ClassPathResource的路径默认统一使用/作为分隔符,不需要用File.separator,避免Windows系统下生成反斜杠导致路径识别错误,直接修改为如下代码即可:
ClassPathResource resource = new ClassPathResource("reportes/" + reportName + ".jasper");

内容的提问来源于stack exchange,提问作者Ronald Valdivia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:45:04