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

SpringBoot执行CommandLineRunner失败,无法读取JSON文件该如何修复?

问题根因

报错的核心原因是资源文件读取逻辑错误:
你调用TypeReference.class.getResourceAsStream("json/countrylist.json")时,不带前缀/的路径默认会从TypeReference类本身的包目录下查找资源,而非你的项目类路径根目录(也就是你放置文件的resources目录),因此返回null,后续传给ObjectMapper时触发空参数异常。

修复方案

方案1:直接修改路径规则

在路径前加/,指定从类路径根目录开始查找:

InputStream inputStream = TypeReference.class.getResourceAsStream("/json/countrylist.json");

方案2:用自定义类的类加载器读取(兼容性更好)

使用你自己编写的配置类的类加载器读取资源,不受第三方类路径规则影响:

InputStream inputStream = StudentConfigaration.class.getClassLoader().getResourceAsStream("json/countrylist.json");

注意类加载器的getResourceAsStream方法默认从类路径根目录查找,不需要加开头的/。

方案3:使用Spring原生资源工具(Spring项目推荐)

用Spring提供的ClassPathResource读取资源,适配Spring Boot的打包、类加载器规则,避免环境差异问题:

// 顶部导入org.springframework.core.io.ClassPathResource
InputStream inputStream = new ClassPathResource("json/countrylist.json").getInputStream();

可选检查项

如果修改后仍然读取失败,可排查以下两点:

  • 确认resources目录下的文件结构正确,确实存在json/countrylist.json文件,路径、文件名没有拼写错误
  • 确认你的构建工具(Maven/Gradle)没有配置排除json文件的资源过滤规则,确保json文件会被正常打包到classes目录下

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 17:27:03