hanker

JAVA - HttpUrlConnection, HttpsUrlConnection (Content-Type 설정) (2) 본문

JAVA

JAVA - HttpUrlConnection, HttpsUrlConnection (Content-Type 설정) (2)

hanker 2024. 10. 20. 13:12
반응형

https://hanke-r.tistory.com/198

 

JAVA - HttpUrlConnection, HttpsUrlConnection (httpMethod GET, POST) (1)

이전에 썻던 내용인데 Url Connection 하여 데이터 송수신 할 경우에, GET방식으로 보낼지 POST 방식으로 보낼지 설정한다. 대부분 API에서 어떤 방식으로 보내라고 설명되어있는데, 대표적인 GET/POST

hanke-r.tistory.com

이전에 Http/HttpsUrlConnection에서 HttpMethod (Get, Post) 방식을 다뤘었는데, 이번 글에서는 Header에 실어서 보내는 데이터 타입에 대해서 알아보자

 

header에 실어서 보내는 데이터 타입이라는 말이 어렵게 보이지만 쉽게 얘기하면 "내가 보내는 데이터는 이런 형식이야! " 라고 알려주는 역할을 한다.

 

Javascript의 Ajax나, react에 axios에서 파일 처리할 때 많이 봤을거라 생각하는데, JAVA에서도 똑같이 사용하면 된다.

 

1. Content-Type의 역할

클라이언트가 서버에 데이터를 요청하거나 서버가 클라이언트에게 데이터를 응답할 때, 그 데이터가 어떤 형식인지 알려줘야 한다.

 

 

 

2. Content-Type의 구성

Content-Type은 타입(type) 서브타입(subtype) 두 부분으로 나뉜다 (이 둘은 /로 구분된다)

  • 예시: text/html
    • 타입: text (문자 데이터라는 뜻)
    • 서브타입: html (HTML 형식의 문서라는 뜻)

 

 

3. 자주 사용되는 Content-Type 예시

아래는 웹에서 자주 쓰이는 Content-Type의 예이다.

  • text/html: HTML 문서일 때 사용. 웹페이지 콘텐츠를 보여줄 때 사용
  • application/json: JSON 형식의 데이터를 주고받을 때 사용. 주로 API 통신에서 데이터를 주고받을 때 사용
  • text/plain: 일반 텍스트 데이터를 보낼 때 사용. 특별한 형식 없이 그냥 글자만 포함될 때 사용
  • application/xml: XML 형식의 데이터를 주고받을 때 사용
  • image/jpeg: JPEG 형식의 이미지 파일을 전송할 때 사용
  • multipart/form-data: 파일 업로드 시 사용되는 형식으로, 여러 파일이나 데이터를 한 번에 전송있다.

 

 

4. 동작 방식

  1. 클라이언트가 서버에 요청
  2. 서버는 요청을 처리한 후 응답
  3. 응답할 때 Content-Type을 사용하여 클라이언트에게 "이 데이터는 이런 형식이야"라고 알려준다.
    • 예시: 서버가 HTML 페이지를 보낸다면 Content-Type: text/html이라고 헤더에 포함해서 응답합니다.
  4. 클라이언트는 이 정보로 데이터를 해석하고, 예를 들어 브라우저라면 HTML을 해석해서 웹 페이지를 렌더링

(렌더링 : HTML,CSS, 자바스크립트 등 개발자가 작성한 문서가 브라우저에서 출력되는 과정)

 

예제를 보자

예제는 이전글에서 작성된 코드에서 수정해서 작성했다.

 public static void main(String[] args) throws Exception {
        try {
            // 요청할 URL (HTTP)
            URL url = new URL("http://127.0.0.1:2000/test");

            // HttpURLConnection 객체 생성
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 요청 방식 설정 (GET)
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
            connection.setDoOutput(true);

			// 전송데이터 변경
            Map<String, Object> map = new HashMap<>();
            map.put("name", "hanker");

            ObjectMapper objectMapper = new ObjectMapper();
            String jsonInputString = objectMapper.writeValueAsString(map);
            // RequestBody 쓰기
            try(OutputStream os = connection.getOutputStream()) {
                byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
                os.write(input, 0, input.length);
            }

            // 응답 코드 확인
            int responseCode = connection.getResponseCode();

            System.out.println("Response Code : " + responseCode);

            // 응답 데이터를 읽음
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String inputLine;
            StringBuilder response = new StringBuilder();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }

            in.close();

            // 결과 출력
            System.out.println("Response : " + response.toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Content-Type이 application/json 방식으로 들어가기 때문에, 전송 데이터를 Map형식으로 변경해줬다.

 

결과.

 

 

끝.

반응형