OpenFeign: Einen Query-Parameter für alle Aufrufe setzen

Im letzten Beitrag über Spring Cloud OpenFeign haben wir gezeigt, wie man OpenFeign in Spring auf einfache Weise verwenden kann, um Rest-APIs zu verwenden.

Manches mal möchte man für alle Aufrufe einer API einen bestimmten Query-Parameter gesetzt haben, wie z.B. einen Access-Token. Um dies einfach zu bewerkstelligen, kann man einen Interceptor definieren, welcher sich zwischen jedem Aufruf hängt.

Feign Interceptor definieren

Wir verwenden wieder unseren Api-Client aus dem vorigen Beispiel, legen aber diesmal eine Konfigurationsklasse an, welche wir dem Client in der @FeignClient Annotation mitgeben (… configuration = ApiClientConfiguration.class):

@FeignClient(value = "apiclient", url = "https://my.blog.com/", configuration = ApiClientConfiguration.class)
public interface MyBlogApiClient {

  @RequestMapping(method = RequestMethod.GET, value = "/posts")
  List<Post> getPosts();

  @RequestMapping(method = RequestMethod.GET, value = "/posts/{postId}", produces = "application/json")
  Post getPostById(@PathVariable("postId") Long postId);
}Code-Sprache: CSS (css)

In der Konfigurations-Klasse selbst definieren wir einen Request-Interceptor, welcher sich automatisch zwischen jedem Call dazwischenhängt und in unserem Fall jedesmal einen Query-Parameter „token“ dazuhängt:

@Configuration
public class ApiClientConfiguration {

    private final token = "xxxxxx";

    @Bean
    public RequestInterceptor requestInterceptor() {
        return requestTemplate -> requestTemplate.query("token", this.token);
    }
}
Code-Sprache: PHP (php)

Danach würde ein Aufruf von z.B. apiClient->getPosts() zu folgender URL führen:

https://my.blog.com/posts?token=xxxxxxx

Fazit

Spring Cloud OpenFeign bietet viele Möglichkeiten, auf einfache Weise die Aufrufe von OpenFeign zu modifizieren und an seine Bedürfnisse anzupassen. In diesem Beispiel haben wir gesehen, wie man zu jedem Aufruf einen bestimmten Query-Parameter hinzufügen kann.