Skip to content

Instantly share code, notes, and snippets.

@dehidehidehi
Last active July 28, 2022 09:12
Show Gist options
  • Select an option

  • Save dehidehidehi/ede4f65f94a80d22badd10a3e0a7ae28 to your computer and use it in GitHub Desktop.

Select an option

Save dehidehidehi/ede4f65f94a80d22badd10a3e0a7ae28 to your computer and use it in GitHub Desktop.
Boilerplate code to generate a general usage Retrofit2 http model client
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.jackson.JacksonConverterFactory;
import java.net.Authenticator;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.util.concurrent.TimeUnit;
import static okhttp3.OkHttpClient.Builder;
@Slf4j
@Getter
@Setter
public final class RetrofitHttpClientProvider {
private boolean useProxy = false;
private String proxyHost;
private Integer proxyPort;
private String proxyUsername;
private String proxyPassword;
/** Retrofit throws a runtime error if the string url does not end with a slash. **/
private static String addSlashStringIfLastCharIsNotSlash(String baseUrl) {
Character lastChar = baseUrl.charAt(baseUrl.length() - 1);
if (!lastChar.equals('/'))
baseUrl = baseUrl + '/';
return baseUrl;
}
public <T> T provideRetrofitHttpClient(String baseUrl, Class<T> classToInstantiate) {
baseUrl = addSlashStringIfLastCharIsNotSlash(baseUrl);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(provideOkHttpClient())
.addConverterFactory(JacksonConverterFactory.create())
.build();
return retrofit.create(classToInstantiate);
}
private OkHttpClient provideOkHttpClient() {
Builder okhttpClientBuilder = new Builder();
okhttpClientBuilder
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS);
if (useProxy)
okhttpClientBuilder.proxy(provideProxy());
return okhttpClientBuilder.build();
}
private Proxy provideProxy() {
InetSocketAddress proxyAddr = new InetSocketAddress(proxyHost, proxyPort);
Proxy proxy = new Proxy(Proxy.Type.HTTP, proxyAddr);
Authenticator.setDefault(proxyProxyAuthenticator());
return proxy;
}
private Authenticator proxyProxyAuthenticator() {
return new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
if (getRequestingHost().equalsIgnoreCase(proxyHost)) {
return new PasswordAuthentication(proxyUsername, proxyPassword.toCharArray());
}
return null;
}
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment