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가 보내는 인코딩 타입을 체크해보았다.
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
'옥상위로 끌려가고 싶지않은 완두콩' 카테고리의 다른 글
[jeus] war파일 배포 실패 - org.springframework.beans.factory.InjectionPoint (0) | 2024.03.13 |
---|---|
[Git_Error] git clone 오류 : git repository not found (0) | 2022.02.03 |
[0124 통합구현 재시험] 오답 정리 (0) | 2022.01.24 |
[git] git bash를 통한 git에 push하기 (0) | 2021.12.30 |
[sts3] No tests found with test runner 'JUnit 3'. (0) | 2021.12.30 |