귀찮아서가끔하는블로그

[JAVA] Spring boot API 호출 샘플 만들기 본문

JAVA

[JAVA] Spring boot API 호출 샘플 만들기

Y-unknow94 2022. 7. 5. 21:01
반응형

Spring boot API 호출 샘플 만들기


이전 포스팅에 작성한 api를 호출하는 샘플을 만들어보려고한다.

이전 포스팅 https://y-unknow94.tistory.com/23 

 

[python] flask를 이용한 python api 만들기

flask를 이용하여 python api 만들기 이전 포스팅에 이어 오늘은 flask를 이용하여 easyocr api를 만들어 보려고 한다. 이전포스팅 https://y-unknow94.tistory.com/22 [python] flask 사용해보기 1. flask란? 플..

y-unknow94.tistory.com

1. spring boot 생성

2. APIController 작성

@RestController
@RequestMapping(value = "/CONT")
public class ApiController {

	@Value("${uploadFilePath}")
	public String SAVE_PATH;

	@Value("${pythonURL}")
	public String pythonURL;
	
	@Value("${debugMode}")
	public boolean debugMode;

	@PostMapping(value = "/upload")
	@ResponseBody
	public Map<String, String> imgUpload(@RequestParam("dataFile") MultipartFile file) {
		Log.TraceLog("imgUpload IN");
		
		//코드 실행 전에 시간 받아오기
		long beforeTime = System.currentTimeMillis();
		
		Map<String, String> resultMap = new HashMap<String, String>();

		if (file.isEmpty()) {
			Log.TraceLog("파일 없음");
		}
		String originName = file.getOriginalFilename();
		
		// 이미지 폴더 경로
		String path = SAVE_PATH;

		try {
			File newFile = new File(path);
			// 저장할 위치의 디렉토리가 존지하지 않을 경우
			if (!newFile.exists()) {
				newFile.mkdirs();
			}
			
			byte[] fileData = file.getBytes();
			OutputStream os = new FileOutputStream(path + "/" + originName);
			os.write(fileData);
			os.close();

		} catch (IOException e) {
			throw new RuntimeException("Fileupload error" + e);
		}

		JSONObject dbSrvJson = new JSONObject();
		dbSrvJson.put("fileName", originName);
		dbSrvJson.put("filePath", path + "/" + originName);
		dbSrvJson.put("debug", debugMode);

		JSONObject result = byPass(pythonURL, dbSrvJson, "POST");
		Log.TraceLog("RESPONSE DATA : " + result);
		long afterTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기
		
		long secDiffTime = (afterTime - beforeTime); //두 시간에 차 계산
		Log.TraceLog("실행 시간 : "+secDiffTime);
		
		String time = Long.toString(secDiffTime);
		
		resultMap.put("result", result.toString());
		resultMap.put("time", time);
		Log.TraceLog("imgUpload OUT");

		return resultMap;
	}

byPass는 이전 포스팅을 확인 하여 사용

이전 포스팅

https://y-unknow94.tistory.com/3?category=1278978 

 

[JAVA] by pass 통신

/** * by pass 통신 * * @param url, data, option(GET/POST) * @return ResponseEntity 성공여부 */ public JSONObject byPass(String url, JSONObject jsonData, String option) { Log.TraceLog("**************..

y-unknow94.tistory.com

3. application.properties 작성

uploadFilePath=images/
pythonURL=http://127.0.0.1:5000/apiTest
debugMode=false

4. sample.html 작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<script>

function imgUpload(){
	console.log('imgUpload');
	const FileElement = document.querySelector('#fileInput');
	console.log('FileElement : ', FileElement);
	console.log(FileElement.files[0]);
	
	var formData = new FormData();	
	formData.append("dataFile",FileElement.files[0]);
	
	fetch('/CONT/upload', {
	    method: 'POST',
	    cache: 'no-cache',
	    body: formData
	})
	.then((response) => response.json())
	.then((data) => {	    
	    var list = "";
	    for(var i=0; i<JSON.parse(data.result).data.txts.length; i++){	
	    	list += "<div><span>" + JSON.parse(data.result).data.txts[i] + "</div>";
	    }
	    document.getElementById("ocr_result_time").innerHTML = data.time;
	    document.getElementById("ocr_result").innerHTML = list;
	});
}
</script>

<body>
	<input id="fileInput" type="file" name="uploadfile" multiple="multiple" />
	<button type="button" id="insert" onclick=imgUpload()>결과 확인</button>
	<br/>
	<br/>
	<span style="font-size: 24px;">처리 시간 : </span><span id="ocr_result_time" style="font-size: 24px;"></span>
	<br/>
	<br/>
	<span style="font-size: 24px;">처리 결과 : </span>
	<div id="ocr_result"></div>
</body>
</html>

5. PageController 작성

@Controller
public class PageContoller implements ErrorController {
	/**
	 * 메인 화면
	 * @return
	 */
	@GetMapping("/")
	public String goMain() {
		return "/sample.html";
	}
}

6. 실행 및 api 호출 테스트

API 호출 테스트

다음과 같이 정상적으로 동작하는 것을 확인할 수 있다.

반응형
Comments