본문 바로가기

IT관련/자바

JAVA(자바) HttpURLConnection으로 Json 데이터 전송하기

JAVA(자바) HttpURLConnection로 Json 데이터 전송하기

 

API를 테스트하거나, 연동이 필요할 시 Json 데이터를 HttpURLConnection을 이용하여

 

전송하는 경우가 많이 있다.

 

이때 데이터에 한글이 들어가 있는 경우 문자가 깨질 수 있어 확인이 필요하다

 

아래는 HttpURL로 Json 데이터 전송 테스트 코드이다.

URL url = new URL("url");
 
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
 
conn.setDoOutput(true);
conn.setRequestMethod("POST"); // 보내는 타입
 
String param = ""; // JsonData
 
// 아래는 전송
OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream());
 
try {
osw.write(param);
osw.flush();
 
// 아래는 응답
BufferedReader br = null;
br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
 
String line = null;
 
while ((line = br.readLine()) != null) {
    // 출력
}
 
// 닫기
osw.close();
br.close();
} catch ...

 

conn.setDoOutput의 경우 기본값이 false이며 true로 지정하지 않을 시 쓰기가 불가능하다.

 

인코딩의 경우 Writer, Reader시 뒤에 인자로 "utf-8" or "euc-kr" 등을 쓰면 인코딩이 가능하다


데이터를 전송할 때 인코딩이 필요하다 하여

 

아래와 같이 JSon 데이터를 인코딩 하여 보내지는 말기를 바란다.

 

  1.  String str = URLEncoder.encode(jsonData, "utf-8");
  2.  byte [] eucKr = jsonData.getBytes("urf-8");

Writer 사용할 때 인자로 인코딩 값이 없으면 서버 설정 값으로 인코딩이 된다고 알고 있다.

 

그런데 직접적으로 데이터를 인코딩하여 전송한다면

 

압축을 두 번 한 것과 다른 게 없지 않은가?..

 

응답하는 서버에서 디코딩을 하는 경우라면 물론 해줘야겠지만

 

별말이 없다면 그냥 위와 같이 사용하길 바란다