如何在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:
@SpringBootApplicationpublic 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








