Bael 4398 retrofit dynamic url (#10090)
* BAEL-2495 fixing InvalidDefinitionException * BAEL-2495 minor changes * Added solution for dynamic Urls using retrofit 2. * Revert "BAEL-2495 minor changes" This reverts commit 174d8664e2612d9d578c72b33571b61dc3a27dbf. * Revert "BAEL-2495 fixing InvalidDefinitionException" This reverts commit 20e1b768e6c50529cb0af250ca437b94a9f01cd9. * BAEL-4398 moved repository to libraries-http-2
This commit is contained in:
parent
0e92c3511b
commit
4a36ad4b79
@ -66,6 +66,18 @@
|
|||||||
<artifactId>reactive-streams</artifactId>
|
<artifactId>reactive-streams</artifactId>
|
||||||
<version>${reactive.stream.version}</version>
|
<version>${reactive.stream.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Retrofit -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.squareup.retrofit2</groupId>
|
||||||
|
<artifactId>retrofit</artifactId>
|
||||||
|
<version>${retrofit.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.squareup.retrofit2</groupId>
|
||||||
|
<artifactId>converter-gson</artifactId>
|
||||||
|
<version>${retrofit.version}</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
@ -76,6 +88,7 @@
|
|||||||
<jetty.httpclient.version>1.0.3</jetty.httpclient.version>
|
<jetty.httpclient.version>1.0.3</jetty.httpclient.version>
|
||||||
<jetty.server.version>9.4.19.v20190610</jetty.server.version>
|
<jetty.server.version>9.4.19.v20190610</jetty.server.version>
|
||||||
<rxjava2.version>2.2.11</rxjava2.version>
|
<rxjava2.version>2.2.11</rxjava2.version>
|
||||||
|
<retrofit.version>2.3.0</retrofit.version>
|
||||||
<spring.webflux.version>5.1.9.RELEASE</spring.webflux.version>
|
<spring.webflux.version>5.1.9.RELEASE</spring.webflux.version>
|
||||||
<reactive.stream.version>1.0.3</reactive.stream.version>
|
<reactive.stream.version>1.0.3</reactive.stream.version>
|
||||||
<reactor.version>3.2.12.RELEASE</reactor.version>
|
<reactor.version>3.2.12.RELEASE</reactor.version>
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.baeldung.retrofit.dynamic;
|
||||||
|
|
||||||
|
import com.baeldung.retrofit.models.Contributor;
|
||||||
|
import com.baeldung.retrofit.models.Repository;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.http.GET;
|
||||||
|
import retrofit2.http.Path;
|
||||||
|
import retrofit2.http.Url;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface GitHubDynamicApi {
|
||||||
|
|
||||||
|
@GET
|
||||||
|
Call<List<Repository>> reposList(@Url String url);
|
||||||
|
|
||||||
|
@GET("{fullUrl}")
|
||||||
|
Call<List<Contributor>> contributorsList(@Path(value = "fullUrl", encoded = true) String fullUrl);
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.baeldung.retrofit.dynamic;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class GitHubDynamicApiApp {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
String url = "https://api.github.com/users/eugenp/repos";
|
||||||
|
List<String> topContributors = new GitHubDynamicApiService().getTopContributors(url);
|
||||||
|
topContributors.forEach(System.out::println);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
package com.baeldung.retrofit.dynamic;
|
||||||
|
|
||||||
|
import com.baeldung.retrofit.models.Contributor;
|
||||||
|
import com.baeldung.retrofit.models.Repository;
|
||||||
|
import retrofit2.Retrofit;
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
class GitHubDynamicApiService {
|
||||||
|
|
||||||
|
private GitHubDynamicApi gitHubDynamicApi;
|
||||||
|
|
||||||
|
GitHubDynamicApiService() {
|
||||||
|
Retrofit retrofit = new Retrofit.Builder().baseUrl("https://api.github.com/").addConverterFactory(GsonConverterFactory.create()).build();
|
||||||
|
|
||||||
|
gitHubDynamicApi = retrofit.create(GitHubDynamicApi.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> getTopContributors(String url) throws IOException {
|
||||||
|
List<Repository> repos = gitHubDynamicApi.reposList(url).execute().body();
|
||||||
|
|
||||||
|
repos = repos != null ? repos : Collections.emptyList();
|
||||||
|
|
||||||
|
return repos.stream().flatMap(repo -> getContributors("repos/eugenp/"+repo+"/contributors")).sorted((a, b) -> b.getContributions() - a.getContributions()).map(com.baeldung.retrofit.models.Contributor::getName).distinct().sorted().collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Stream<Contributor> getContributors(String fullUrl) {
|
||||||
|
List<Contributor> contributors = null;
|
||||||
|
try {
|
||||||
|
contributors = gitHubDynamicApi.contributorsList(fullUrl).execute().body();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
contributors = contributors != null ? contributors : Collections.emptyList();
|
||||||
|
|
||||||
|
return contributors.stream().filter(c -> c.getContributions() > 100);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.baeldung.retrofit.models;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
public class Contributor {
|
||||||
|
|
||||||
|
@SerializedName("login")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private Integer contributions;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getContributions() {
|
||||||
|
return contributions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContributions(Integer contributions) {
|
||||||
|
this.contributions = contributions;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Contributer [name=" + name + ", contributions=" + contributions + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.baeldung.retrofit.models;
|
||||||
|
|
||||||
|
public class Repository {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Repository [name=" + name + ", description=" + description + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user