SpringBoot读取resources目录下JSON文件的优雅方案

栗子
栗子
发布时间:2026-10-15 | 3人浏览过
原创

本文提供在SpringBoot中读取资源目录(classpath)下JSON文件的高效实现方案。通过整合Spring的ResourceUtils、Apache Commons IO的文件读取工具以及Fastjson2的反序列化能力,开发者可以避免使用冗长的原生File I/O代码,以最少且优雅的代码量完成配置数据的加载与解析。

实现思路与准备

在构建模块化或配置化的业务系统时,将非核心数据(如动态公告)存储在项目内部而非数据库是一种轻量级选择。为了准确读取这些文件,核心逻辑分为三步:首先利用Spring环境定位资源路径,其次将文件流转换为字符串,最后将其解析为目标对象列表。

第1步:引入必要依赖

目的:获取文件内容转换及JSON解析的支持库。

操作:在pom.xml中添加以下版本依赖:

<!-- 资源目录资源文件读取 -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

<!-- 反序列化json字符串 -->
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.14</version>
</dependency>

第2步:创建JSON资源文件

入口:位于项目资源目录 src/main/resources/ 下。

动作:新建 notice.json 文件并填入标准JSON数组格式。例如:

[
  {
    "title": "新功能xxx上线",
    "content": "支持xxx"
  },
  {
    "title": "旧功能xxx下线",
    "content": "不支持xxx"
  }
]

核心Service层实现

第3步:定义并实现读取接口

入口:编写一个服务类,注入于Spring容器。

关键参数:

  • 文件路径:使用 classpath:notice.json 前缀定位资源。
  • 编码格式:统一指定 UTF-8 防止中文乱码。

代码实现:

package com.example.springbootjson.service.impl;

import com.alibaba.fastjson2.JSON;
import com.example.springbootjson.domain.NoticeInfo;
import com.example.springbootjson.service.NoticeService;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.ResourceUtils;

import java.io.File;
import java.io.IOException;
import java.util.List;

@Service
public class NoticeServiceImpl implements NoticeService {

    @Override
    public List<NoticeInfo> getNoticeInfoList() throws IOException {
        // 1. 获取资源物理路径
        File file = ResourceUtils.getFile("classpath:notice.json");
        // 2. 转为字符串
        String json = FileUtils.readFileToString(file, "UTF-8");
        // 3. 反序列化为对象列表
        List<NoticeInfo> noticeInfoList = JSON.parseArray(json, NoticeInfo.class);
        return noticeInfoList;
    }
}

验证结果

动作:运行集成测试或使用该Service的业务Controller。

@Test
void contextLoads() throws IOException {
    System.out.println(noticeService.getNoticeInfoList());
}

执行成功后,控制台输出符合预期结构的数据即表示配置读取链路通畅。相比直接使用原始的Java FileInputStream,这种方式利用了Spring封装的API,使代码更具可读性且自动处理了部分环境差异问题。

以上就是SpringBoot读取资源目录中JSON文件方法的详细内容,更多关于SpringBoot资源文件读取的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表