You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
NOTE: Spring Cloud is released under the non-restrictive Apache 2.0 license.
9
+
If you would like to contribute to this section of the documentation or if you find an error, you can find the source code and issue trackers for the project at {github-issues}[github].
Copy file name to clipboardExpand all lines: docs/modules/ROOT/pages/spring-cloud-openfeign.adoc
+27-10Lines changed: 27 additions & 10 deletions
Original file line number
Diff line number
Diff line change
@@ -1,10 +1,5 @@
1
-
= Spring Cloud OpenFeign
2
-
include::_attributes.adoc[]
3
-
4
-
*{spring-cloud-version}*
5
-
6
-
include::intro.adoc[]
7
-
1
+
[[features]]
2
+
= Spring Cloud OpenFeign Features
8
3
9
4
[[spring-cloud-feign]]
10
5
== Declarative REST Client: Feign
@@ -290,6 +285,7 @@ public FeignClientConfigurer feignClientConfigurer() {
290
285
291
286
TIP: By default, Feign clients do not encode slash `/` characters. You can change this behaviour, by setting the value of `spring.cloud.openfeign.client.decodeSlash` to `false`.
292
287
288
+
[[springencoder-configuration]]
293
289
==== `SpringEncoder` configuration
294
290
295
291
In the `SpringEncoder` that we provide, we set `null` charset for binary content types and `UTF-8` for all the other ones.
@@ -306,6 +302,7 @@ We can configure timeouts on both the default and the named client. OpenFeign wo
306
302
307
303
NOTE: In case the server is not running or available a packet results in _connection refused_. The communication ends either with an error message or in a fallback. This can happen _before_ the `connectTimeout` if it is set very low. The time taken to perform a lookup and to receive such a packet causes a significant part of this delay. It is subject to change based on the remote host that involves a DNS lookup.
308
304
305
+
[[creating-feign-clients-manually]]
309
306
=== Creating Feign Clients Manually
310
307
311
308
In some cases it might be necessary to customize your Feign Clients in a way that is not
@@ -511,6 +508,7 @@ If one needs access to the cause that made the fallback trigger, one can use the
511
508
}
512
509
----
513
510
511
+
[[feign-and-primary]]
514
512
=== Feign and `@Primary`
515
513
516
514
When using Feign with Spring Cloud CircuitBreaker fallbacks, there are multiple beans in the `ApplicationContext` of the same type. This will cause `@Autowired` to not work because there isn't exactly one bean, or one marked as primary. To work around this, Spring Cloud OpenFeign marks all Feign instances as `@Primary`, so Spring Framework will know which bean to inject. In some cases, this may not be desirable. To turn off this behavior set the `primary` attribute of `@FeignClient` to false.
@@ -561,6 +559,7 @@ public interface UserClient extends UserService {
561
559
562
560
WARNING: `@FeignClient` interfaces should not be shared between server and client and annotating `@FeignClient` interfaces with `@RequestMapping` on class level is no longer supported.
563
561
562
+
[[feign-request/response-compression]]
564
563
=== Feign request/response compression
565
564
566
565
You may consider enabling the request or response GZIP compression for your
@@ -585,6 +584,7 @@ These properties allow you to be selective about the compressed media types and
585
584
586
585
TIP: Since the OkHttpClient uses "transparent" compression, that is disabled if the `content-encoding` or `accept-encoding` header is present, we do not enable compression when `feign.okhttp.OkHttpClient` is present on the classpath and `spring.cloud.openfeign.okhttp.enabled` is set to `true`.
587
586
587
+
[[feign-logging]]
588
588
=== Feign logging
589
589
590
590
A logger is created for each Feign client created. By default, the name of the logger is the full class name of the interface used to create the Feign client. Feign logging only responds to the `DEBUG` level.
@@ -616,10 +616,11 @@ public class FooConfiguration {
616
616
}
617
617
----
618
618
619
+
[[feign-capability-support]]
619
620
=== Feign Capability support
620
621
621
622
The Feign capabilities expose core Feign components so that these components can be modified. For example, the capabilities can take the `Client`, _decorate_ it, and give the decorated instance back to Feign.
622
-
The support for Micrometer is a good real-life example for this. See <<micrometer-support>>.
623
+
The support for Micrometer is a good real-life example for this. See xref:spring-cloud-openfeign.adoc#micrometer-support[Micrometer Support].
623
624
624
625
Creating one or more `Capability` beans and placing them in a `@FeignClient` configuration lets you register them and modify the behavior of the involved client.
625
626
@@ -634,6 +635,7 @@ public class FooConfiguration {
634
635
}
635
636
----
636
637
638
+
[[micrometer-support]]
637
639
=== Micrometer Support
638
640
639
641
If all of the following conditions are true, a `MicrometerObservationCapability` bean is created and registered so that your Feign client is observable by Micrometer:
@@ -682,6 +684,7 @@ public class FooConfiguration {
682
684
}
683
685
----
684
686
687
+
[[feign-caching]]
685
688
=== Feign Caching
686
689
687
690
If `@EnableCaching` annotation is used, a `CachingCapability` bean is created and registered so that your Feign client recognizes `@Cache*` annotations on its interface:
@@ -698,6 +701,7 @@ public interface DemoClient {
698
701
699
702
You can also disable the feature via property `spring.cloud.openfeign.cache.enabled=false`.
700
703
704
+
[[feign-querymap-support]]
701
705
=== Feign @QueryMap support
702
706
703
707
Spring Cloud OpenFeign provides an equivalent `@SpringQueryMap` annotation, which
@@ -730,6 +734,7 @@ public interface DemoTemplate {
730
734
731
735
If you need more control over the generated query parameter map, you can implement a custom `QueryMapEncoder` bean.
732
736
737
+
[[hateoas-support]]
733
738
=== HATEOAS support
734
739
735
740
Spring provides some APIs to create REST representations that follow the https://en.wikipedia.org/wiki/HATEOAS[HATEOAS] principle, https://spring.io/projects/spring-hateoas[Spring Hateoas] and https://spring.io/projects/spring-data-rest[Spring Data REST].
@@ -750,6 +755,7 @@ public interface DemoTemplate {
750
755
}
751
756
----
752
757
758
+
[[spring-matrixvariable-support]]
753
759
=== Spring @MatrixVariable Support
754
760
755
761
Spring Cloud OpenFeign provides support for the Spring `@MatrixVariable` annotation.
@@ -780,6 +786,7 @@ public interface DemoTemplate {
780
786
}
781
787
----
782
788
789
+
[[feign-collectionformat-support]]
783
790
=== Feign `CollectionFormat` support
784
791
We support `feign.CollectionFormat` by providing the `@CollectionFormat` annotation.
785
792
You can annotate a Feign client method (or the whole class to affect all methods) with it by passing the desired `feign.CollectionFormat` as annotation value.
As the https://github.com/OpenFeign/feign[OpenFeign project] does not currently support reactive clients, such as https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/reactive/function/client/WebClient.html[Spring WebClient], neither does Spring Cloud OpenFeign.We will add support for it here as soon as it becomes available in the core project.
803
811
804
812
Until that is done, we recommend using https://github.com/Playtika/feign-reactive[feign-reactive] for Spring WebClient support.
805
813
814
+
[[early-initialization-errors]]
806
815
==== Early Initialization Errors
807
816
808
817
Depending on how you are using your Feign clients you may see initialization errors when starting your application.
@@ -814,6 +823,7 @@ To work around this problem you can use an `ObjectProvider` when autowiring your
814
823
ObjectProvider<TestFeignClient> testFeignClient;
815
824
----
816
825
826
+
[[spring-data-support]]
817
827
=== Spring Data Support
818
828
819
829
If Jackson Databind and Spring Data Commons are on the classpath, converters for `org.springframework.data.domain.Page` and `org.springframework.data.domain.Sort` will be added automatically.
See `org.springframework.cloud.openfeign.FeignAutoConfiguration.FeignJacksonConfiguration` for details.
828
838
839
+
[[spring-refreshscope-support]]
829
840
=== Spring `@RefreshScope` Support
830
841
If Feign client refresh is enabled, each Feign client is created with:
831
842
832
843
* `feign.Request.Options` as a refresh-scoped bean. This means properties such as `connectTimeout` and `readTimeout` can be refreshed against any Feign client instance.
833
844
* A url wrapped under `org.springframework.cloud.openfeign.RefreshableUrl`. This means the URL of Feign client, if defined
834
-
with `spring.cloud.openfeign.client.config.{feignName}.url` property, can be refreshed against any Feign client instance.
845
+
with `spring.cloud.openfeign.client.config.\{feignName}.url` property, can be refreshed against any Feign client instance.
835
846
836
847
You can refresh these properties through `POST /actuator/refresh`.
TIP: DO NOT annotate the `@FeignClient` interface with the `@RefreshScope` annotation.
844
855
856
+
[[oauth2-support]]
845
857
=== OAuth2 Support
846
858
OAuth2 support can be enabled by setting following flag:
847
859
----
@@ -854,6 +866,7 @@ TIP:: Using the `serviceId` as OAuth2 client registrationId is convenient for lo
854
866
855
867
TIP:: If you do not want to use the default setup for the `OAuth2AuthorizedClientManager`, you can just instantiate a bean of this type in your configuration.
856
868
869
+
[[transform-the-load-balanced-http-request]]
857
870
=== Transform the load-balanced HTTP request
858
871
859
872
You can use the selected `ServiceInstance` to transform the load-balanced HTTP Request.
@@ -881,6 +894,7 @@ For `Request`, you need to implement and define `LoadBalancerFeignRequestTransfo
881
894
If multiple transformers are defined, they are applied in the order in which beans are defined.
882
895
Alternatively, you can use `LoadBalancerFeignRequestTransformer.DEFAULT_ORDER` to specify the order.
883
896
897
+
[[x-forwarded-headers-support]]
884
898
=== X-Forwarded Headers Support
885
899
886
900
`X-Forwarded-Host` and `X-Forwarded-Proto` support can be enabled by setting following flag:
@@ -890,6 +904,7 @@ Alternatively, you can use `LoadBalancerFeignRequestTransformer.DEFAULT_ORDER` t
=== Supported Ways To Provide URL To A Feign Client
894
909
You can provide a URL to a Feign client in any of the following ways:
895
910
@@ -919,9 +934,10 @@ The URL provided in the configuration properties remains unused.
919
934
920
935
|===
921
936
937
+
[[aot-and-native-image-support]]
922
938
=== AOT and Native Image Support
923
939
924
-
Spring Cloud OpenFeign supports Spring AOT transformations and native images, however, only with refresh mode disabled, Feign clients refresh disabled (default setting) and <<attribute-resolution-mode,lazy `@FeignClient` attribute resolution>> disabled (default setting).
940
+
Spring Cloud OpenFeign supports Spring AOT transformations and native images, however, only with refresh mode disabled, Feign clients refresh disabled (default setting) and xref:spring-cloud-openfeign.adoc#attribute-resolution-mode[lazy `@FeignClient` attribute resolution] disabled (default setting).
925
941
926
942
WARNING: If you want to run Spring Cloud OpenFeign clients in AOT or native image modes, make sure to set `spring.cloud.refresh.enabled` to `false`.
927
943
@@ -931,6 +947,7 @@ TIP: If you want to run Spring Cloud OpenFeign clients in AOT or native image mo
931
947
932
948
TIP: However, if you set the `url` value via properties, it is possible to override the `@FeignClient` `url` value by running the image with `-Dspring.cloud.openfeign.client.config.[clientId].url=[url]` flag. In order to enable overriding, a `url` value also has to be set via properties and not `@FeignClient` attribute during buildtime.
933
949
950
+
[[configuration-properties]]
934
951
== Configuration properties
935
952
936
953
To see the list of all Spring Cloud OpenFeign related configuration properties please check link:appendix.html[the Appendix page].
0 commit comments