Spring Boot의 리소스에서 JSON 파일을 읽는 방법
Spring Boot 2.1.5 릴리스를 사용하여 다음과 같은 Spring Boot Micro 서비스 샘플을 작성했습니다.
메이븐 프로젝트 구조:
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"}
마이크로서비스 애플리케이션:
@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이 답을 제공했지만, 저는 스프링 부츠의 아티팩트가 만들어졌을 때 그러한 것이 없다는 것을 추가하고 싶습니다.src/main/폴더를 더 이상 사용할 수 없습니다(스프링 부트 아티팩트를 열고 직접 확인할 수 있습니다).
따라서 다음과 같은 리소스를 로드할 수 없습니다.
FilePathUtils.readFileToString("../src/main/resources/data.json", MicroServiceApplication.class);
봄은 정말로 라고 불리는 추상을 가지고 있습니다.Resource응용 프로그램에서 사용할 수 있으며 클래스/구성에 주입할 수도 있습니다.
@Value("classpath:data/data.json")
Resource resourceFile;
접두사 "classpath"는 리소스가 클래스 경로에서 확인됨을 의미합니다(모든 항목을 아티팩트에 올바르게 패키징됨).
유용하게 사용할 수 있는 꽤 좋은 튜토리얼이 있습니다.
봄에 사용할 수 있는 부트 프로젝트ResourceUtils
Path file = ResourceUtils.getFile("data/data.json").toPath();
또는ClassPathResource
String clsPath = new ClassPathResource("data/data.json").getPath();
다음과 같은 다른 확장 파일을 읽는 경우가 있습니다..graphql또는.mmdb또는.json당신은 그것을 읽을 필요가 있습니다.InputStream용수철을 사용하여ResourceLoader이 기사는 명확한 설명이 있습니다.
@Autowire
private ResourceLoader resourceLoader;
Resource resource =resourceLoader.getResource("classpath:GeoLite2-Country.mmdb");
InputStream dbAsStream = resource.getInputStream();
그리고 복사합니다.InputStream임시 파일 사용Files.copy
Files.copy(inputStream, outputFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
도서관을 이용하시면 됩니다.
잭슨ObjectMapper클래스(com.fasterxml.jackson.databind.ObjectMapper)는 가장 간단한 구문 분석 방법 중 하나입니다.JSON잭슨 오브젝트 맵퍼can parse JSON문자열, 스트림 또는 파일 및create a Java object or object graph구문 분석된 JSON을 나타냅니다. Parsing JSONJava 객체로 변환하는 것은 다음과 같습니다.deserialize Java objectsJSON에서.
// create Object Mapper
ObjectMapper mapper = new ObjectMapper();
// read JSON file and map/convert to java POJO
try {
SomeClass someClassObject = mapper.readValue(new File("../src/main/resources/data.json"), SomeClass.class);
System.out.println(someClassObject);
} catch (IOException e) {
e.printStackTrace();
}
그리고 당신은 그랬어야 했습니다.jackson-databind당신의.pom파일:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.4</version>
</dependency>
언급URL : https://stackoverflow.com/questions/58703834/how-to-read-json-file-from-resources-in-spring-boot
'programing' 카테고리의 다른 글
| Git: 리포지토리에서 파일을 삭제하지 않고 인덱스에서 파일을 제거하는 방법 (0) | 2023.06.26 |
|---|---|
| 자바를 이용한 대용량 엑셀 파일 작성 API (0) | 2023.06.21 |
| 전체 파일 경로에서 파일 이름 찾기 (0) | 2023.06.21 |
| iOS용 Firebase, GoogleService-Info.plist 속성 "IS_ANALYATIC_ENABLED"가 "아니오"로 설정됨 (0) | 2023.06.21 |
| JDBC 배치 삽입 예외 처리 (0) | 2023.06.21 |