[Java] OkHttpClient로 동기, 비동기 요청하기

[Java] OkHttpClient로 동기, 비동기 요청하기

반응형

Spring Boot 프로젝트에 OkHttpClient로 동기와 비동기 방식으로 post요청하는 방법

1. Maven에 Dependency추가

com.squareup.okhttp3 okhttp 3.4.2

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(); } }

반응형

from http://soyeondev.tistory.com/228 by ccl(A) rewrite - 2021-02-13 23:01:01