Notice
Recent Posts
Recent Comments
Link
투케이2K
112. (spring/스프링) okhttp 사용해 post 방식 query string 쿼리스트링 요청 실시 본문
[개발 환경 설정]
개발 툴 : inteli j
개발 언어 : spring
[소스 코드]
package com.kwon.mssqltestproject;
import okhttp3.*;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
public class C_Okhttp {
/**
* // -----------------------------------------
* TODO [클래스 설명]
* // -----------------------------------------
* 1. okhttp 네트워크 요청 클래스
* // -----------------------------------------
* 2. 필요 build.gradle 설정 :
*
* implementation("com.squareup.okhttp3:okhttp:4.9.1")
* // -----------------------------------------
* */
/**
* // -----------------------------------------
* // TODO [빠른 로직 찾기 : 주석 로직 찾기]
* // -----------------------------------------
* // [SEARCH FAST] : [POST 쿼리 스트링 요청 실시]
* // -----------------------------------------
* */
// TODO [전역 변수 선언]
private static final String CLASS_NAME = "C_Okhttp";
public static final String RES_SUCCESS = "RES_SUCCESS";
public static final String RES_STATUS = "RES_STATUS";
public static final String RES_HEADER = "RES_HEADER";
public static final String RES_DATA = "RES_DATA";
// TODO [SEARCH FAST] : [POST 쿼리 스트링 요청 실시]
public static Map<String, Object> post(String url, Map<String, Object> data){
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("post"));
System.out.println("[URL] : "+String.valueOf(url));
System.out.println("[DATA] : "+String.valueOf(data));
System.out.println("================================================");
System.out.println("\n");
/**
* // -----------------------------------------
* // TODO [호출 방법]
* // -----------------------------------------
* String url = "http://jsonplaceholder.typicode.com/posts?";
*
* Map params = new HashMap();
* params.put("userId",1);
* params.put("id",1);
*
* Map response = C_Okhttp.post(url, params);
* // -----------------------------------------
* */
// [초기 리턴 데이터 선언 실시]
Map<String, Object> returnData = new HashMap<>();
String urlData = String.valueOf(url.replaceAll(" ", ""));
String paramData = "";
// [로직 처리 실시]
try {
// [사전 주소 형식 체크 실시]
if (urlData != null && urlData.isEmpty() == false && urlData.length() > 0
&& urlData.trim().equals("") == false && urlData.trim().equals("null") == false
&& urlData.startsWith("http") == true){ // [널 아님]
}
else {
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("post"));
System.out.println("[ERROR] : "+String.valueOf("url is null"));
System.out.println("[RETURN] : "+String.valueOf(returnData));
System.out.println("================================================");
System.out.println("\n");
// [리턴 반환]
return returnData;
}
// [쿼리 스트링 데이터 널 여부 체크 실시]
if (data != null && data.isEmpty() == false && data.size()>0){ // [널 아님]
if (urlData.endsWith("?") == true){ // [물음표 추가]
}
else {
urlData = urlData + "?";
}
// [map 데이터 key, value 확인]
Set set = data.keySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()){
if (paramData.length()>0){
paramData += "&";
}
String key = (String) iterator.next();
String value = String.valueOf(data.get(key));
// [쿼리스트링에 순차적으로 삽입 실시]
paramData += URLEncoder.encode(key, "UTF-8");
paramData += "=";
paramData += URLEncoder.encode(value, "UTF-8");
}
}
// [ok http 요청 실시]
String urlTotal = urlData + paramData;
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("post"));
System.out.println("[REQUEST] : "+String.valueOf(urlTotal));
System.out.println("================================================");
System.out.println("\n");
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.retryOnConnectionFailure(false)
.build();
Request request = new Request.Builder()
.url(urlTotal)
.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8;")
.addHeader("Cache-Control", "no-cache")
.post(new FormBody.Builder().build())
.build();
// [동기 요청 실시]
Call call = client.newCall(request);
Response response = call.execute();
if (response.code() >= 200 && response.code() < 300){
returnData.put(RES_SUCCESS, true);
}
else {
returnData.put(RES_SUCCESS, false);
}
returnData.put(RES_STATUS, response.code());
//returnData.put(RES_HEADER, response.headers());
returnData.put(RES_DATA, response.body().string());
}
catch (Exception e){
e.printStackTrace();
}
// [로그 결과 출력]
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("post"));
System.out.println("[RESPONSE] : "+String.valueOf(returnData));
System.out.println("================================================");
System.out.println("\n");
// [리턴 결과 반환 실시]
return returnData;
}
} // [클래스 종료]
[결과 출력]
반응형
'Spring' 카테고리의 다른 글
114. (spring/스프링) [유틸 파일] stringIsUrlParsing - String 문자열 데이터가 URL 형식으로 파싱 (0) | 2022.10.15 |
---|---|
113. (spring/스프링) okhttp 사용해 post body json 요청 실시 (0) | 2022.10.11 |
111. (spring/스프링) okhttp 사용해 get 방식 query string 쿼리스트링 요청 실시 (0) | 2022.10.11 |
110. (spring/스프링) GSON 사용해 Map , Json 데이터 변환 수행 실시 (0) | 2022.10.10 |
109. (spring/스프링) [유틸 파일] listListMapNotNull 리스트 리스트 맵 널 여부 체크 실시 (0) | 2022.10.10 |
Comments