SpringBoot读取资源目录中JSON文件的方法实例
作者:肥肥技术宅 发布时间:2023-04-26 02:00:42
标签:springboot,读取,json文件
前言
最近在做一个公共相关的内容,公告里边的内容,打算做成配置化的。
但是考虑到存储到数据库,需要建立数据库表;
存储到配置组件中,担心配置组件存储不下;
于是决定先暂时存储到项目中的资源目录中,以JSON的格式存储,待观察公告这一模块的需求变更如何,再另行做打算。
本文分享SpringBoot读取资源目录JSON配置文件的相关方法。
思路
使用Spring的ResourceUtils读取资源目录下的json文件。
使用common-io将读取的文件转化为json字符串。
使用fastjson将json字符串反序列为对象。
示例
1.Maven依赖
pom.xml,主要是common-io、fastjson的引入。
<!-- 资源目录资源文件读取 -->
<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资源文件
notice.json,简单列举要使用json内容。
[
{
"title": "新功能xxx上线",
"content": "支持xxx"
},
{
"title": "旧功能xxx下线",
"content": "不支持xxx"
}
]
3.读取json的Service
3.1.定义接口
package com.example.springbootjson.service;
import com.example.springbootjson.domain.NoticeInfo;
import java.io.IOException;
import java.util.List;
/**
* @author hongcunlin
*/
public interface NoticeService {
/**
* 获取公告
*
* @return 公告
* @throws IOException 文件
*/
List<NoticeInfo> getNoticeInfoList() throws IOException;
}
3.2.实现接口
这里可以说是本文的核心部分了,具体可以看代码中的实现,通过ResourceUtils读取notice.json这个json文件,通过common-io的FileUtils转化文件为json字符串,通过fastjson的JSON反序列json对象。
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;
/**
* @author hongcunlin
*/
@Service
public class NoticeServiceImpl implements NoticeService {
@Override
public List<NoticeInfo> getNoticeInfoList() throws IOException {
File file = ResourceUtils.getFile("classpath:notice.json");
String json = FileUtils.readFileToString(file, "UTF-8");
List<NoticeInfo> noticeInfoList = JSON.parseArray(json, NoticeInfo.class);
return noticeInfoList;
}
}
4.测试接口
编写一个简单的集成测试,将上述编写的Service注入,执行方法,打印执行结果。
package com.example.springbootjson;
import com.example.springbootjson.service.NoticeService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.io.IOException;
@SpringBootTest
class SpringbootJsonApplicationTests {
@Resource
private NoticeService noticeService;
@Test
void contextLoads() throws IOException {
System.out.println(noticeService.getNoticeInfoList());
}
}
可以看到,可以正常地输出json文件中的内容,说明我们的程序是正确的。
最后
本文分享了SpringBoot工程读取项目资源目录下的文件的相关方法,分享的原因,是看到很多人使用了原始的文件IO的API,这没必要,SpringBoot已经为我们封装提供好了很多优雅的API了。作为开发者,连API的使用,我们也得与时俱进。
来源:https://blog.csdn.net/m0_71777195/article/details/127050596
0
投稿
猜你喜欢
- 本文主要和大家分享介绍了关于Java JDK * 使用的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:前言代理是一种常用的
- 一、栈(Stack)1、什么是栈?栈其实就是一种数据结构 - 先进后出(先入栈的数据后出来,最先入栈的数据会被压入栈底)什么是java虚拟机
- SpringBoot读取外置logback配置文件springboot项目可以读取外置配置文件,避免了修改配置文件需要重新打包部署的问题。部
- * String类是不可变类,只要对String进行修改,都会导致新的对象生成。* StringBuffer和StringBuilder都是
- 今天去某在线教育面试面试官让做的一道题,题目描述如下:给定一个不重复的无序数组arr和一个定值num查找arr中是否有两个数的和等于num有
- 功能函数// 图像旋转void Rotate(const cv::Mat &srcImage, cv::Mat &dstIm
- 前言之前一篇文章介绍了基本的统一异常处理思路: Spring MVC/Boot 统一异常处理最佳实践.上篇文章也有许多人提出了一些问题:如何
- 一、前言Redis是一个NoSQL(非关系型数据库)数据库之一,key-value存储系统或者说是一个缓存键值对数据库,具有如下特性:基于内
- 1. 什么是RESTREST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状
- 一、问题背景在Intellij idea中,新建Maven项目,在魔项目中新建多个模块,发现模块间相互调用失败二、问题原因模块间无法相互引用
- 前言之前在SpringBoot项目中简单使用定时任务,不过由于要借助cron表达式且都提前定义好放在配置文件里,不能在项目运行中动态修改任务
- 本文实例讲述了Java基于分治法实现的快速排序算法。分享给大家供大家参考,具体如下:package cn.nwsuaf.quick;/**
- 问题描述Feign 在请求时是不会将 request 的请求头带着请求的,导致假如 Feign 调用的接口需要请求头的信息,比如当前用户的
- 本文实例为大家分享了Android自定义View之组合控件,仿电商app顶部栏的相关代码,供大家参考,具体内容如下效果图:分析:左右两边可以
- 简单之美,springmvc,mybatis就是一个很好的简单集成方案,能够满足一般的项目需求。闲暇时间把项目配置文件共享出来,供大家参看:
- 前言在java Thread类中,我们会看到interrupt()、interrupted()及isInterrupted(),在大多数情况
- RestTemplate 请求url中包含百分号 会被转义成25最初使用RestTemplate 进行远程调用方法如下:private St
- 每次写批量的时候,都要在网上搜索一下,虽然都做过多次了,但具体的自己还是记不住(汗颜),所以索性今天就记录下来。前期说明:foreach的主
- 1、设置ssh安装ssh相关软件包:sudo apt-get install openssh-client openssh-server然后
- Spring BeanPostProcessor执行顺序首先 Spring 通过调用构造方法创建 User 对象;User 对象创建好之后,