java
[Java] OkHttpClient로 동기, 비동기 요청하기
tonirr
2021. 2. 13. 22:27
Spring Boot 프로젝트에 OkHttpClient로 동기와 비동기 방식으로 post요청하는 방법
1. Maven에 Dependency추가
<!-- https://mvnrepository.com/artifact/com.squareup.okhttp/okhttp -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.4.2</version>
</dependency>
2. 동기 요청방법
package com.example.demo;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.junit.jupiter.api.Test;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Dispatcher;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
public class OkHttpTest {
private static final MediaType MEDIA_TYPE = MediaType.parse("text/plain");
@Test
public void test() throws IOException {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Dispatcher dispatcher2 = new Dispatcher(executorService);
OkHttpClient client = new OkHttpClient();
String fileName = "C:\\upload/1234.txt";
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("name", "tester1")
.addFormDataPart("file", "1234.jpeg",
RequestBody.create(MEDIA_TYPE, new File(fileName)))
.build();
Request request = new Request.Builder()
.url("http://localhost:8080/attachment")
.post(requestBody)
.build();
System.out.println(request);
try (Response response = client.newCall(request).execute()) {
//return response.body().string();
}
client.dispatcher().executorService().shutdown();
}
}
3. 비동기 요청방법
package com.example.demo;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.junit.jupiter.api.Test;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Dispatcher;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
public class OkHttpTest {
private static final MediaType MEDIA_TYPE = MediaType.parse("text/plain");
@Test
public void test() throws IOException {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Dispatcher dispatcher2 = new Dispatcher(executorService);
OkHttpClient client = new OkHttpClient();
String fileName = "C:\\upload/1234.txt";
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("name", "tester1")
.addFormDataPart("file", "1234.txt",
RequestBody.create(MEDIA_TYPE, new File(fileName)))
.build();
Request request = new Request.Builder()
.url("http://localhost:8080/attachment")
.post(requestBody)
.build();
System.out.println(request);
client.newCall(request).enqueue(new Callback() {
@Override public void onFailure(Call call, IOException e) {
System.out.println("fail: "+request);
e.printStackTrace();
}
@Override public void onResponse(Call call, Response response) throws IOException {
System.out.println("response in");
try (ResponseBody responseBody = response.body()) {
System.out.println("success: ");
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
}
}
});
client.dispatcher().executorService().shutdown();
}
}