
org.vfdtech.implementations.ApiClient Maven / Gradle / Ivy
package org.vfdtech.implementations;
import lombok.extern.slf4j.Slf4j;
import okhttp3.ConnectionPool;
import okhttp3.Headers;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Protocol;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
import org.apache.commons.lang3.tuple.Pair;
import org.vfdtech.models.ResponseWrapper;
import java.util.Collections;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@Slf4j
public class ApiClient {
private static OkHttpClient client;
public ApiClient() {
client = create();
}
public static OkHttpClient create() {
ConnectionPool connectionPool =
new ConnectionPool(10, 60, TimeUnit.MILLISECONDS);
return new OkHttpClient.Builder().followRedirects(false)
.protocols(Collections.singletonList(Protocol.HTTP_1_1))
.retryOnConnectionFailure(true)
.connectionPool(connectionPool)
.build();
}
public static ResponseWrapper restExchange(String httpMethod, String url, Object... args) {
if (client == null) {
client = create();
}
Request request;
if (args == null) {
args = new Object[]{};
}
String requestBody = args.length > 0 ? (String) args[0] : "";
Headers headers = args.length > 1 ? (Headers) args[1] : null;
if (!requestBody.equalsIgnoreCase( "")) {
log.info("::: REQUEST URL :::{}", url);
log.info("::: REQUEST TO SEND :::{}", requestBody);
}else{
log.info("::: REQUEST URL :::{}", url);
}
switch (httpMethod) {
case "POST":
MediaType mediaType = args.length > 2 ? (MediaType) args[2] :
MediaType.get("application/json; charset=utf-8");
RequestBody body = RequestBody.create(requestBody, mediaType);
request = (headers != null) ? new Request.Builder()
.url(url)
.post(body)
.headers(headers)
.build() :
new Request.Builder()
.url(url)
.post(body)
.build();
break;
case "GET":
request = headers != null ? new Request.Builder()
.url(url)
.headers(headers)
.get()
.build() : new Request.Builder()
.url(url)
.get()
.build();
break;
default:
throw new IllegalStateException("Unexpected value: " + httpMethod);
}
try (Response response = client.newCall(Objects.requireNonNull(request)).execute()) {
ResponseBody responseBody = response.body();
String responseString = "";
if (responseBody != null) {
responseString = responseBody.string();
log.info("::: RESPONSE FROM SERVICE:::{}", responseString);
}
return ResponseWrapper.builder()
.statusCode(response.code())
.responseEntity(Pair.of(response.message(), responseString))
.build();
} catch (Exception e) {
e.printStackTrace();
return ResponseWrapper.builder().statusCode(500)
.responseEntity(Pair.of(e.getMessage(), null)).build();
}
}
public enum HttpMethod {
POST, GET, PUT, DELETE
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy