OkHttp는 REST API, HTTP 통신을 간편하게 사용할 수 있도록 만들어진 JAVA Library 이다.
오픈 소스로 공개된 소프트웨어 이기 때문에, 내부 동작이 궁금하면 코드를 열어볼 수 있다.
https://github.com/square/okhttp
1. 의존성 추가
1-1) Maven
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>5.0.0-alpha.11</version>
</dependency>
1-2) Gradle
implementation group: 'com.squareup.okhttp', name: 'okhttp', version: '5.0.0-alpha.11'
2. Get 구현
OkHttpClient http;
@Transactional
public String getMobiusList() throws IOException {
Response response = null;
List<String> result = new ArrayList<>();
String reData = null;
// URL 로 parameter 전송
String callUrl = "http://" + OPTIMIZATION_IP_ADDRESS + OPTIMIZATION_PORT + OPTIMIZATION_SERVICE_ID;
try {
// 인스턴스 생성
http = new OkHttpClient();
// get 요청 build
Request.Builder builder = new Request.Builder().url(callUrl).get();
// url header 설정
builder.addHeader("", OPTIMIZATION_XM2MRI);
builder.addHeader("", OPTIMIZATION_XM2MORIGIN);
// request 객체 생성
Request request = builder.build();
// 결과 전달
response = this.http.newCall(request).execute();
} catch (Exception e) {
String errorMsg = e.getMessage();
log.error(errorMsg, e);
response = null;
}
// 바디만 필요하여 바디 결과 값만 return
return response.body().string();
}
3. POST 구현
public void postMobius(){
// URL 로 parameter 전송
String callUrl = "http://" + OPTIMIZATION_IP_ADDRESS + OPTIMIZATION_PORT + OPTIMIZATION_SERVICE_ID;
try{
// 인스턴스 생성.
http = new OkHttpClient();
String postBody = "{\"param\":\"test\"}";
//POST request body를 구성.
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), postBody);
// url header 설정
builder.addHeader("", OPTIMIZATION_XM2MRI);
builder.addHeader("", OPTIMIZATION_XM2MORIGIN);
// request 객체 생성
Request request = builder.build();
// 결과 전달
response = this.http.newCall(request).execute();
//응답처리
if(response.isSuccessful()){
ResponseBody body = response.body();
responseString = body.string();
System.out.println("[responseBody]:"+responseString);
body.close();
}
}catch(Exception e){
e.printStrackTrace();
response = null;
}
JSONObject 를 사용하여 변환해 보내는 법도 있다.
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");
OkHttpClient client = new OkHttpClient();
JSONObject json = new JSONObject();
json.put("test", "1111");
json.put("test2", "2222");
RequestBody body = RequestBody.create(JSON, json.toString());
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Response response = client.newCall(request).execute();
response.body().string();
주의사항
response.body().string() 은 딱 한 번만 호출해야 한다.
이상 호출 할 경우 해당 에러가 발생 한다.
java.lang.IllegalStateException : closed
'JAVA' 카테고리의 다른 글
[JAVA] 다른 프로젝트 클래스 import 하기 + Dynamic Web Module 추가하는 방법 (0) | 2023.11.16 |
---|---|
[JAVA] StreamAPI를 이용 한 List 값 중복 제거 (0) | 2023.06.22 |
[JAVA] object List to map using stream - Object List를 Map 으로 변환하기 (0) | 2023.06.20 |
[JAVA] List를 comma(,)로 구분된 String(문자열)으로 변환하기 (0) | 2023.06.20 |
[JAVA] Java Stream - 두 개의 List 객체 비교하기 (0) | 2023.06.15 |