본문 바로가기
IT 개발/개념정리

[JAVA] POST방식 JSON데이터 보내기(with GSON)

by Dev.Jeon 2023. 1. 13.
반응형

  개발 배경  

많은 양의 데이터를 GET으로 보내는 것에는 한계가 있는데요.

그래서 POST방식으로 데이터를 보내야 할 때 

JSON을 Body에 담아 POST로 보내면 편리합니다.

 

실제로 저도 프로젝트에서 속도 개선을 위해서 

GET  >>  POST로 변경하여 작업하다가

알게된 사실을 여러분과 공유하려 합니다.

 

GET과 POST방식에 대해서 궁금하시다면  ▼

[네트워크] GET과 POST 차이

 

목차

1. 개요

2. HpptURLConnecion을 활용한 JSON POST 요청(with GSON)

3. JSON 데이터 파싱(with GSON)

4. 응답 읽기

5. 결론

 


1. 개요

이 방식은 JAVA에 내장된 HttpURLConnection 이용해서 POST 방식으로 전송하는 방법 입니다.

 

JSON데이터를 받을 Web서버가 없이 단순히 테스트만 해보시는 용이라면

webhook.site 를 이용하셔 간단히 테스트 해보시면 유용할 것 입니다~!

 

2. HttpURLConnection을 활용한 JSON POST 요청(with GSON)

// URL 개체생성
URL url = new URL("https://Info/jsondata.do");

// HttpURLConnection 객체 생성    		
HttpURLConnection httpConn = null;

// URL 연결 (웹페이지 URL 연결.)
// URL 객체에서 openConnection 메서드를 호출하여 HttpURLConnection 객체를 가져올 수 있다.
// 추상 클래스이므로 HttpURLConnection을 직접 인스턴스화 할 수 없다.
httpConn = (HttpURLConnection) url.openConnection();

// 요청 방식 선택 (GET, POST)
httpConn.setRequestMethod("POST");

// 타입설정(application/json) 형식으로 전송 (Request Body 전달시 application/json로 서버에 전달.)
// 제대로 명시 하지 않으면 HTTP 상태코드 "400-bad request"를 반환
httpConn.setRequestProperty("Content-Type", "application/json; utf-8"); 

// OutputStream으로 POST 데이터를 넘겨주겠다는 옵션.
httpConn.setDoOutput(true);    
OutputStreamWriter wr = null;
wr = new OutputStreamWriter(httpConn.getOutputStream(), "UTF-8");

// 요청 본문 생성
String jsonString = "{"name": "kim", "id"; "id123"}";
JSONObject jsonData = new JSONObject();
// 데이터 담기
jsonData.put("jsonString", jsonString); 


// Request Body에 Data 셋팅.
// Gson : JAVA 객체(object)를 JSON 표현식으로 변환
wr.write(new Gson().toJson(jsonData));	

// Request Body에 Data 입력.
wr.flush();

 

3. JSON 데이터 파싱

@RequestMapping(value = "/Infodata.do")
public @ResponseBody String Infodata(HttpServletRequest request) throws Exception {
        
    // 응답용 데이터
    String result = "Y";

    try {
                BufferedReader br = null;
                br = new BufferedReader(new InputStreamReader(request.getInputStream()));

                // 클라이언트에서 보낸 문자열 출력
                String returnMessage = br.readLine();		

                // GSON 라이브러리로 읽기
                Gson gson = new Gson();
                JSONObject jSONOb = gson.fromJson(returnMessage, JSONObject.class);

                // VO to JSONArray
                CommonVO testVO = gson.fromJson(jSONOb.toString(), CommonVO.class);

                // TO DO : 작업할 내용 작성
                System.out.println(testVO.getId()+".....id");

                // 응답용 데이터 : 성공
                result = "Y";
        } catch (Exception e) {
                // 응답용 데이터 : 실패
                result = "N";
        }

}

 

4. 응답 읽기

// 서버에서 보낸 응답 데이터 수신 받기
rd = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));

String returnMsg = rd.readLine();
System.out.println("응답메시지 : " + returnMsg);

String line1;

while ((line1 = rd.readLine()) != null) {
    removeYn = line1;
    if(line1.equals("Y")){
        System.out.println("-------------SEND_EVENT SUCCESS FILE NAME");
    } else {
        System.out.println("-------------SEND_EVENT FAILURE FILE NAME");
    }
}

 

5. 결론

이상 JSON 데이터를 POST 로 요청하고 파싱하는 법을 알아보았습니다.

거기에 GSON까지 곁들여 사용해 보았습니다.

 

GSON에 대해서 더 알아보고 싶으시면 ▼

[JAVA] JSON to VO로 쉽게 변환

 

GSON을 알면 앞으로 JSON 작업 하실 때 확실히 편하실 거라고 생각합니다.

더 좋은 방법이 있다면 댓글로 알려주시면 정말 감사드리겠습니다!

앞으로도 좋은 라이브러리나 소스을 알게되면 또 작성해 보겠습니다.

반응형

댓글