diff --git a/libraries/pom.xml b/libraries/pom.xml index fbab220a30..8a4ccdf5b5 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -517,6 +517,11 @@ com.squareup.retrofit2 adapter-rxjava ${retrofit.version} + + + com.squareup.okhttp3 + logging-interceptor + 3.9.0 com.darwinsys diff --git a/libraries/src/main/java/com/baeldung/retrofitguide/GitHubServiceGenerator.java b/libraries/src/main/java/com/baeldung/retrofitguide/GitHubServiceGenerator.java new file mode 100644 index 0000000000..d32891be9e --- /dev/null +++ b/libraries/src/main/java/com/baeldung/retrofitguide/GitHubServiceGenerator.java @@ -0,0 +1,58 @@ +package com.baeldung.retrofitguide; + +import java.io.IOException; +import okhttp3.Interceptor; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.logging.HttpLoggingInterceptor; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class GitHubServiceGenerator { + + private static final String BASE_URL = "https://api.github.com/"; + + private static Retrofit.Builder builder + = new Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()); + + private static Retrofit retrofit = builder.build(); + + private static OkHttpClient.Builder httpClient + = new OkHttpClient.Builder(); + + private static HttpLoggingInterceptor logging + = new HttpLoggingInterceptor() + .setLevel(HttpLoggingInterceptor.Level.BASIC); + + public static S createService(Class serviceClass) { + if (!httpClient.interceptors().contains(logging)) { + httpClient.addInterceptor(logging); + builder.client(httpClient.build()); + retrofit = builder.build(); + } + return retrofit.create(serviceClass); + } + + public static S createService(Class serviceClass, final String token) { + if (token != null) { + httpClient.interceptors().clear(); + httpClient.addInterceptor(new Interceptor() { + @Override + public Response intercept(Interceptor.Chain chain) throws IOException { + Request original = chain.request(); + Request.Builder builder = original.newBuilder() + .header("Authorization", token); + Request request = builder.build(); + return chain.proceed(request); + } + }); + builder.client(httpClient.build()); + retrofit = builder.build(); + } + return retrofit.create(serviceClass); + } + +} diff --git a/libraries/src/main/java/com/baeldung/retrofitguide/Main.java b/libraries/src/main/java/com/baeldung/retrofitguide/Main.java new file mode 100644 index 0000000000..8a674f634b --- /dev/null +++ b/libraries/src/main/java/com/baeldung/retrofitguide/Main.java @@ -0,0 +1,49 @@ +package com.baeldung.retrofitguide; + +import java.io.IOException; +import okhttp3.OkHttpClient; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +public class Main { + + public static void main(String[] args) { + //Manual creation + OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); + Retrofit retrofit = new Retrofit.Builder() + .baseUrl("https://api.github.com/") + .addConverterFactory(GsonConverterFactory.create()) + .client(httpClient.build()) + .build(); + UserService service = retrofit.create(UserService.class); + //Using GitHubServiceGenerator + service = GitHubServiceGenerator.createService(UserService.class); + Call callSync = service.getUser("eugenp"); + Call callAsync = service.getUser("eugenp"); + + try { + Response response = callSync.execute(); + User user = response.body(); + System.out.println(user); + } catch (IOException ex) { + } + + // Execute the call asynchronously. Get a positive or negative callback. + callAsync.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + User user = response.body(); + System.out.println(user); + } + + @Override + public void onFailure(Call call, Throwable throwable) { + System.out.println(throwable); + } + }); + + } +} diff --git a/libraries/src/main/java/com/baeldung/retrofitguide/User.java b/libraries/src/main/java/com/baeldung/retrofitguide/User.java new file mode 100644 index 0000000000..1b097aa4f1 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/retrofitguide/User.java @@ -0,0 +1,65 @@ +package com.baeldung.retrofitguide; + +public class User { + + private String login; + private long id; + private String url; + private String company; + private String blog; + private String email; + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getCompany() { + return company; + } + + public void setCompany(String company) { + this.company = company; + } + + public String getBlog() { + return blog; + } + + public void setBlog(String blog) { + this.blog = blog; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public String toString() { + return "User{" + "login=" + login + ", id=" + id + ", url=" + url + ", company=" + company + ", blog=" + blog + ", email=" + email + '}'; + } + +} diff --git a/libraries/src/main/java/com/baeldung/retrofitguide/UserService.java b/libraries/src/main/java/com/baeldung/retrofitguide/UserService.java new file mode 100644 index 0000000000..6e18e685ca --- /dev/null +++ b/libraries/src/main/java/com/baeldung/retrofitguide/UserService.java @@ -0,0 +1,17 @@ +package com.baeldung.retrofitguide; + +import java.util.List; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Path; +import retrofit2.http.Query; + +public interface UserService { + + @GET("/users") + public Call> getUsers(@Query("per_page") int per_page, @Query("page") int page); + + @GET("/users/{username}") + public Call getUser(@Path("username") String username); + +}