...
WebClientBuilder
används för att skapa upp en REST-klient (WebClient
):
Code Block | ||
---|---|---|
| ||
WebClient webClient = new WebClientBuilder() .withBaseUrl("https://api.github.com/") [1] .withLogbook(...) [2] .withOAuth2Client(...) [3] .withBasicAuthentication(...) [4] .withConnectTimeout(...) [5] .withReadTimeout(...) [6] .build(); [7] ... String user = "Sundsvallskommun"; Mono<List<Repo>> repos = webClient.get() .uri("/users/{user}/repos", user) .retrieve() .onStatus(HttpStatus::is4xxClientError, response -> ...) .onStatus(HttpStatus::is5xxServerError, response -> ...) .bodyToMono(new ParameterizedTypeReference<List<Repo>>() {}); ... |
...
Code Block | ||
---|---|---|
| ||
@Bean ClientRegistration clientRegistration() { return ClientRegistration.withRegistrationId("someId") .clientId("someClientId") .clientSecret("someClientSecret") .tokenUri("https://somehost.com/token") .authorizationGrantType("client_credentials"AuthorizationGrantType.CLIENT_CREDENTIALS) .build(); } |
[4]
Om angiven (användarnamn och lösenord) sätts Basic-autentisering upp.[5]
Anger connect timeout. Default-värde är 10 sekunder.[6]
Anger read timeout. Default-värde är 60 sekunder.[7]
Skapar själva REST-klienten.
WebClient
är i grundutförande reaktiv (asynkron) med stöd för Project Reactor:s Mono
och Flux
. Spring Framework hanterar detta sömlöst sett till att exponerade endpoints kan returnera värden av de typerna utan att det egentligen blir någon skillnad för anropande klienter, men i det fall att man vill använda WebClient
på ett synkront sätt kan man använda .block()
, vilket då i exemplet ovan skulle bli:
...