본문 바로가기
Spring

application/json으로 데이터를 받는 방법 (JAVA 1.7)

by ESTP 개발자 2025. 6. 14.


application/json 형식으로 받은 데이터는 request.getParameter()로는 처리할 수 없고, 

대신 request.getInputStream()을 사용하여 HTTP 본문(body)에서 데이터를 읽고 파싱해야 합니다.

 

application/json 데이터 처리 흐름

1. request.getInputStream()을 사용하여 HTTP 요청 본문(body)에서 JSON 데이터를 읽어옵니다.
2. 읽어온 JSON 데이터를 문자열로 변환합니다.
3. 문자열을 JSON 객체로 파싱하여 원하는 값을 추출합니다.


1. request.getInputStream()으로 application/json 데이터 읽기

 


application/json 데이터는 HTTP 요청 본문에 포함되어 있기 때문에, getInputStream()을 통해 이를 읽어야 합니다.


x-www-form-urlencoded는 key1=value1&key2=value2&key3=value3 이런 데이터로 구성되어있고

application/json은 {    "key1": "value1",    "key2": "value2",  "key3": "value3" } 이렇게 구성되어있음.

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.json.JSONObject;

public class MyServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        try {
            // InputStream을 통해 JSON 데이터를 읽어오기
            BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
            StringBuilder jsonBuilder = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                jsonBuilder.append(line);
            }

            // JSON 문자열로 변환
            String jsonString = jsonBuilder.toString();

            // JSON 문자열을 JSONObject로 변환
            JSONObject jsonObject = new JSONObject(jsonString);

            // JSON 객체에서 "USER_ID" 값을 추출
            String userId = jsonObject.getString("USER_ID");

            // 출력
            System.out.println("USER_ID: " + userId);  // 예: "12345"

            // 응답을 반환하는 코드 추가 가능
            response.getWriter().write("Received USER_ID: " + userId);

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


2. HttpServletRequest에서 JSON 데이터 읽기 :

request.getInputStream():
클라이언트가 보낸 JSON 데이터는 HTTP 요청 본문에 포함됩니다. 이 데이터를 바이트 스트림으로 읽을 수 있습니다.


BufferedReader:
BufferedReader를 사용하여 문자 스트림으로 변환하고, 한 줄씩 읽어 

JSON 문자열을 모은 후 전체 JSON을 하나의 문자열로 만듭니다.

JSONObject:
org.json.JSONObject를 사용하여 문자열을 JSON 객체로 변환합니다.

그 후, getString("USER_ID")와 같은 방식으로 데이터를 추출할 수 있습니다.


3. 실제 요청 예시

클라이언트가 Postman 또는 다른 HTTP 클라이언트를 사용하여 POST 요청을 보내는 경우:

Postman 설정:
- URL : https://naver.com/API/hello.do
-  Method: POST
-  Headers : Content-Type: application/json
-  Body (raw): json
{
    "USER_ID": "12345"
}

 

서버에서 받는 데이터:
위와 같은 JSON 데이터가 요청 본문에 담겨 서버로 전송됩니다.

JSON 데이터가 아닌 다른 형식의 데이터를 받았을 때
만약 application/x-www-form-urlencoded 형식으로 데이터를 받았다면, 

그 데이터를 request.getParameter("USER_ID")로 받아올 수 있습니다.

 

하지만, application/json 형식은 이와 다르기 때문에 getParameter()는 사용할 수 없고, getInputStream()을 사용해야 합니다.

결론:
application/json 형식으로 데이터가 전송되었을 때, request.getParameter()로는 데이터를 처리할 수 없습니다. 

대신, request.getInputStream()을 사용하여 HTTP 요청 본문에서 JSON 문자열을 읽고, 이를 JSONObject로 파싱하여 원하는 값을 추출할 수 있습니다.

이 방식으로 JSON 데이터를 Postman을 통해 서버로 보내고, Java에서 이를 JSONObject로 처리할 수 있습니다.