반응형
개발 배경
많은 양의 데이터를 GET으로 보내는 것에는 한계가 있는데요.
그래서 POST방식으로 데이터를 보내야 할 때
JSON을 Body에 담아 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에 대해서 더 알아보고 싶으시면 ▼
GSON을 알면 앞으로 JSON 작업 하실 때 확실히 편하실 거라고 생각합니다.
더 좋은 방법이 있다면 댓글로 알려주시면 정말 감사드리겠습니다!
앞으로도 좋은 라이브러리나 소스을 알게되면 또 작성해 보겠습니다.
반응형
'IT 개발 > 개념정리' 카테고리의 다른 글
jQuery id값으로 data() 값 가져오기 (0) | 2023.01.30 |
---|---|
[Oracle] 코멘트로 테이블, 컬럼 찾기 (0) | 2023.01.20 |
[Oracle] LISTAGG 여러 행을 하나의 컬럼에 가져오기 (2) | 2023.01.19 |
[네트워크] GET과 POST의 차이 (0) | 2023.01.12 |
[JAVA] Json to VO, 간편한 변환 방법 (0) | 2023.01.11 |
댓글