如何在Spring Boot中从资源读取JSON文件

使用Spring Boot" title="Spring Boot">Spring Boot 2.1.5 Release创建了以下示例Spring Boot微服务:

Maven项目结构:

MicroService

pom.xml

src

└───main

├───java

│ │

│ └───com

│ └───microservice

│ │

│ └───MicroServiceApplication.java

└───resources

└───data.json

application.properties

具有以下JSON文件(在src / main / resources / data.json内部):

{"firstName": "John", "lastName": "Doe"}

MicroServiceApplication:

@SpringBootApplication

public class MicroServiceApplication {

@Bean

CommandLineRunner runner() {

return args -> {

String data = FilePathUtils.readFileToString("../src/main/resources/data.json", MicroServiceApplication.class);

System.out.println(data);

};

}

public static void main(String[] args) {

SpringApplication.run(MicroServiceApplication.class, args);

}

}

引发以下异常:

  java.lang.IllegalStateException: Failed to execute CommandLineRunner

...

Caused by: java.io.IOException: Stream is null

FilePathUtils.java:

import io.micrometer.core.instrument.util.IOUtils;

import java.io.IOException;

import java.io.InputStream;

import java.nio.charset.Charset;

public class FilePathUtils {

public static String readFileToString(String path, Class aClazz) throws IOException {

try (InputStream stream = aClazz.getClassLoader().getResourceAsStream(path)) {

if (stream == null) {

throw new IOException("Stream is null");

}

return IOUtils.toString(stream, Charset.defaultCharset());

}

}

}

我可能做错了什么?

回答:

虽然@Deadpool提供了答案,但我想补充一点,当创建spring boot的工件时,src/main/不再有这样的文件夹(您可以打开spring

boot的工件并自己确认)。

因此,您 像这样加载资源:

FilePathUtils.readFileToString("../src/main/resources/data.json", MicroServiceApplication.class);

Spring确实有一个称为的抽象Resource,可以在应用程序中使用,甚至可以注入到类/配置中:

@Value("classpath:data/data.json")

Resource resourceFile;

注意前缀“ classpath”,这意味着将从类路径解析资源(读取正确打包到工件中的所有内容)。

有一个很好的教程可以很方便

以上是 如何在Spring Boot中从资源读取JSON文件 的全部内容, 来源链接: utcz.com/qa/431472.html

回到顶部