Last active
July 28, 2022 09:12
-
-
Save dehidehidehi/ede4f65f94a80d22badd10a3e0a7ae28 to your computer and use it in GitHub Desktop.
Boilerplate code to generate a general usage Retrofit2 http model client
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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