Denna starter förenklar användningen av Feign som REST-klient, via Spring Cloud OpenFeign. För att använda den, lägg till följande i tjänstens pom.xml
:
...
Med hjälp av klassen FeignMultiCustomizer
genereras den faktiska klient som används av interfacet:en böna som kedjar ihop flera FeignBuilderCustomizer
till en, som sedan används när klienten skapas. Värt att notera är att FeignBuilderCustomizer
kan blandas med bönor som plockas upp av feign (se alternativ 3) så länge de två alternativen inte krockar med varandra.
Code Block | ||
---|---|---|
| ||
@Import(FeignConfiguration.class) [1] public class GithubConfiguration { @Bean FeignBuilderCustomizer feignBuilderCustomizer() { return FeignMultiCustomizer.create() .withCustomizer(...) [2] .withErrorDecoder(...) [3] .withRequestInterceptor(...) [4] .withRequestOptions(...) [5] .withRequestTimeoutsInSeconds(...) [6] .withRetryableOAuth2InterceptorForClientRegistration(...) [7] .composeCustomizersToOne(); [8] } } |
...
[1]
Ifall FeignConfiguration
från Dept-44 importeras så läggs funktionalitet för loggning av request och response, requestId-hantering samt hantering av truststore för domän sundsvall.se (för hantering av anrop mot andra mikrotjänster i WSO2) till.[2]
Möjliggör ytterligare anpassning av Feign-klienten i de fall stöd saknas i ramverket.[3]
Anger den error decoder som ska användas för att översätta de fel som kastas av integrationen.[4]
Anger de interceptorer som ska användas för att förändra det utgående anropet före det skickas.[5]
Anger de anrops-alternativ som ska gälla för klienten avseende timeouts och follow-redirects[6]
En alternativ metod till [5]
där follow-redirects default sätts till true[7]
Anger att ett nytt anrop med förnyat access token ska ske ifall autentiseringsuppgifterna har gått ut. [8]
Skapar den FeignBuilderCustomizer
som sedan används av OpenFeign-ramverket när klienten skapas. Alternativ 2 - Note FeignBuilder
Obs, denna hjälpklass är på väg att fasas ut och ersätts med FeignMultiCustomizer som beskrivits ovan
FeignBuilder
används, precis som det låter, för att bygga en REST-klient vars metoder definieras i ett interface som annoteras med Spring:s annoteringar för request-mappning, t.ex.:
...
language | java |
---|
...
language | java |
---|
...
(
...
[
...
[1]
Anger bas-URL för REST-klienten som skapas.[2]
Om angiven sätts request- och response-loggning upp.[3]
Om angiven, sätts OAuth2-autentisering upp. Tar in en ClientRegistration
, t.ex.:
Code Block | ||
---|---|---|
| ||
@Bean
ClientRegistration clientRegistration() {
return ClientRegistration.withRegistrationId("someId")
.clientId("someClientId")
.clientSecret("someClientSecret")
.tokenUri("https://somehost.com/token")
.authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
.build();
} |
...
4]
kan användas repetitivt för all lägga till multipla RequestInterceptor
).
Alternativ 2 - Annoteringar
Först och främst behövs ett klient-interface:
...