재채기는 H

Spring ClassPathResource를 이용한 /src/main/resources 경로 JSON파일 파싱하기 본문

spring

Spring ClassPathResource를 이용한 /src/main/resources 경로 JSON파일 파싱하기

에취~H 2022. 7. 31. 20:32
반응형

 

프로젝트 운영서버 초기 배포 후,

 

스키마 테이블에 옵션값을 쿼리로 insert해야 주어야하는 불편함이 있었다.

 

그래서 [초기옵션설정]이란 버튼을 통해 최초 생성에만, JSON파일을 파싱하여 옵션을 설정하고자 한다.

 

우선 JSON파일은 /src/main/resources/option 경로에 생성해두었다.

/src/main/resources 경로의 하위파일을 어떻게 불러올 수 있을 까?

 

간단하다. 

 

스프링에서 제공해주는 ClassPathResource 클래스를 사용하여 가져올 수 있다.

ClassPathResource는 classpath에 설정한 resources경로를 인식하여 하위파일을 가져온다.

 

classpath의 기본경로가 src/main/java, src/main/resources인데, 이 두 경로 중 resources폴더를 탐색한다.

프로젝트의 .classpath파일에서 경로를 확인할 수 있다!

 

이후 InputStream 타입으로 읽어와 JSON파싱하면 된다.

 

import org.springframework.core.io.ClassPathResource;


	/**
	 * 초기옵션값 세팅
	 */
	public int insertInitOption(RequestContext session) throws Exception {
		String filePath = "/option/InitOption.json";

		ClassPathResource classPathResource = new ClassPathResource(filePath);
		if(!classPathResource.exists()){
		    throw new IllegalArgumentException();
		}
		Object initOptJsonObj = new JSONParser().parse(new InputStreamReader(classPathResource.getInputStream(), "UTF-8"));
		JSONArray initOptjsonArr = (JSONArray)initOptJsonObj;

		int result = 0;
		try {
		 if (initOptjsonArr.size() > 0){
			 Map<String, Object> map = new HashMap<>();

	         for(int i=0; i<initOptjsonArr.size(); i++){
	    	        JSONObject jsonObj = (JSONObject)initOptjsonArr.get(i);

		            map.put("optCd", (String)jsonObj.get("OPT_CD_ARR"));
		            map.put("optNm", (String)jsonObj.get("OPT_NM_ARR"));
		            map.put("optType", (String)jsonObj.get("OPT_TYPE_ARR"));
		            map.put("optValue", (String)jsonObj.get("OPT_VALUE_ARR"));
		            map.put("optDesc", (String)jsonObj.get("OPT_DESC_ARR"));
		            map.put("str1", (String)jsonObj.get("STR_1_ARR"));
		            map.put("str2", (String)jsonObj.get("STR_2_ARR"));

		            result = mapper.insertInitOption(session, map);

		    		if(result == 0) {
		    		    break;
		    		}
		        }
	        }
		}catch(Exception e) {
			throw e;
		}

		return result;
	}

 

 

ClassPathResource에 관한 상세정보는 아래 링크의 document에서 확인할 수 있다.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/io/ClassPathResource.html

반응형

'spring' 카테고리의 다른 글

MyBatis <sql>과 <include> 정리  (0) 2022.07.24
이클립스 프로젝트 import 안될때  (7) 2020.07.19
Comments