728x90

처음에 아래와 같은 코드를 입력했었는데 

출력된 xml결과물을 보니 영어와 숫자는 잘 출력됐는데 한글만 ???로 깨져서 보였다

package com.kh.pitapet.organization.controller;

import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

import org.apache.commons.io.Charsets;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.BufferedReader;

@RestController
public class apitestController {
	@GetMapping("/apitest")
	public String apicall() {
		
		
		
		
		StringBuffer result = new StringBuffer();
		try {
			String urlstr = "https://openapi.gg.go.kr/OrganicAnimalProtectionFacilit?" +
					"KEY=secret"		 +
					"&Type=xml" +
					"&pIndex=1"+
					"&pSize=100";
			URL url = new URL(urlstr);
			HttpURLConnection urlconnection = (HttpURLConnection) url.openConnection();
			urlconnection.setRequestMethod("GET");
			
			//System.out.println(urlconnection.getContentType()); UTF-8로 나옴
			
			BufferedReader br = new BufferedReader(new InputStreamReader(urlconnection.getInputStream(),"UTF-8"));
			
			String returnLine; 
			result.append("<xmp>");
			while((returnLine = br.readLine())!=null) {
				result.append(returnLine+"\n");
			}
			urlconnection.disconnect();
			
		}catch(Exception e) {
			e.printStackTrace();
		}
		return result+"</xmp>";
		
		
	
	}
  
}

그래서 해본방법은

 

1. api가 보내는 인코딩 타입을 체크해보았다.

stackoverflow에 달린 답변

urlconnection.getContentType() 으로 출력해보았더니 charset=utf-8 으로 나왔다.

 

2. 내 환경설정에서 혹시나 인코딩설정이 EUC-KR로 되어있거나 다른걸로 되어있을까봐 preference에 들어가서 체크했다.

3. 그러고 37줄의 utf-8 부분을 StandardCharsets.UTF_8로도 바꿔보았다

역시나 실패였고, 다른  ISO-8859-1, EUC-KR,,등등으로 도 바꿔봤는데 oㅁ△ 이렇게 나와서 난 뭐 .. 오징어게임하는줄

 

.

.

.

아무튼 수많은 실패끝에 성공한 코드는

 

package com.kh.pitapet.organization.controller;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;




@WebServlet("/apiTest1")
public class RestTestController extends HttpServlet implements Servlet {
	private static final long serialVersionUID = 1L;

	public RestTestController() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/xml;charset=UTF-8");

		BufferedReader br = null;
		try {
			String urlstr = "https://openapi.gg.go.kr/OrganicAnimalProtectionFacilit?KEY=" +  "key는 비밀이다" + "&Type=xml&pIndex=1&pSize=100";
			URL url = new URL(urlstr);
			HttpURLConnection urlconnection = (HttpURLConnection) url.openConnection();
			urlconnection.setRequestMethod("GET");
			br = new BufferedReader(new InputStreamReader(urlconnection.getInputStream(), "UTF-8"));
			String result = "";
			String line;
			while ((line = br.readLine()) != null) {
				result = result + line + "\n";
			}
			response.getWriter().append(result);
		} catch (Exception e) {
			response.getWriter().append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><response><header><resultCode>-999</resultCode><resultMsg>알 수 없는 오류</resultMsg></header></response>");
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

이거다... 일단 xml로 가져왔는데 강사님은 json으로 받아오라하셨는데 걍...xml로 해봐야겠다...^_^;;

 

 

728x90

+ Recent posts