Skip to content

Commit 6b29a1f

Browse files
authored
Move Spring Data Jackson Modules from FeignClientsConfiguration to FeignAutoConfiguration - Fix #205 (#430)
1 parent bbef082 commit 6b29a1f

File tree

4 files changed

+31
-17
lines changed

4 files changed

+31
-17
lines changed

docs/src/main/asciidoc/spring-cloud-openfeign.adoc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,14 @@ To work around this problem you can use an `ObjectProvider` when autowiring your
704704
ObjectProvider<TestFeginClient> testFeginClient;
705705
----
706706

707+
=== Spring Data Support
708+
You may consider enabling Jackson Modules for the support `org.springframework.data.domain.Page` and `org.springframework.data.domain.Sort` decoding.
709+
710+
[source,java]
711+
----
712+
feign.autoconfiguration.jackson.enabled=true
713+
----
714+
707715
== Configuration properties
708716

709717
To see the list of all Sleuth related configuration properties please check link:appendix.html[the Appendix page].

spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignAutoConfiguration.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import javax.annotation.PreDestroy;
2727

28+
import com.fasterxml.jackson.databind.Module;
2829
import feign.Client;
2930
import feign.Feign;
3031
import feign.httpclient.ApacheHttpClient;
@@ -54,13 +55,17 @@
5455
import org.springframework.cloud.commons.httpclient.OkHttpClientFactory;
5556
import org.springframework.cloud.openfeign.support.DefaultGzipDecoderConfiguration;
5657
import org.springframework.cloud.openfeign.support.FeignHttpClientProperties;
58+
import org.springframework.cloud.openfeign.support.PageJacksonModule;
59+
import org.springframework.cloud.openfeign.support.SortJacksonModule;
5760
import org.springframework.context.annotation.Bean;
5861
import org.springframework.context.annotation.Configuration;
5962
import org.springframework.context.annotation.Import;
6063

6164
/**
6265
* @author Spencer Gibb
6366
* @author Julien Roy
67+
* @author Grzegorz Poznachowski
68+
* @author Nikita Konev
6469
*/
6570
@Configuration(proxyBeanMethods = false)
6671
@ConditionalOnClass(Feign.class)
@@ -86,6 +91,22 @@ public FeignContext feignContext() {
8691
return context;
8792
}
8893

94+
@Bean
95+
@ConditionalOnMissingBean(PageJacksonModule.class)
96+
@ConditionalOnClass(name = "org.springframework.data.domain.Page")
97+
@ConditionalOnProperty(value = "feign.autoconfiguration.jackson.enabled", havingValue = "true")
98+
public Module pageJacksonModule() {
99+
return new PageJacksonModule();
100+
}
101+
102+
@Bean
103+
@ConditionalOnMissingBean(SortJacksonModule.class)
104+
@ConditionalOnClass(name = "org.springframework.data.domain.Sort")
105+
@ConditionalOnProperty(value = "feign.autoconfiguration.jackson.enabled", havingValue = "true")
106+
public Module sortModule() {
107+
return new SortJacksonModule();
108+
}
109+
89110
@Configuration(proxyBeanMethods = false)
90111
@ConditionalOnMissingClass({ "feign.hystrix.HystrixFeign",
91112
"org.springframework.cloud.client.circuitbreaker.CircuitBreaker" })

spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientsConfiguration.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import java.util.ArrayList;
2020
import java.util.List;
2121

22-
import com.fasterxml.jackson.databind.Module;
2322
import com.netflix.hystrix.HystrixCommand;
2423
import feign.Contract;
2524
import feign.Feign;
@@ -46,10 +45,8 @@
4645
import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory;
4746
import org.springframework.cloud.openfeign.clientconfig.FeignClientConfigurer;
4847
import org.springframework.cloud.openfeign.support.AbstractFormWriter;
49-
import org.springframework.cloud.openfeign.support.PageJacksonModule;
5048
import org.springframework.cloud.openfeign.support.PageableSpringEncoder;
5149
import org.springframework.cloud.openfeign.support.ResponseEntityDecoder;
52-
import org.springframework.cloud.openfeign.support.SortJacksonModule;
5350
import org.springframework.cloud.openfeign.support.SpringDecoder;
5451
import org.springframework.cloud.openfeign.support.SpringEncoder;
5552
import org.springframework.cloud.openfeign.support.SpringMvcContract;
@@ -158,18 +155,6 @@ public FeignLoggerFactory feignLoggerFactory() {
158155
return new DefaultFeignLoggerFactory(this.logger);
159156
}
160157

161-
@Bean
162-
@ConditionalOnClass(name = "org.springframework.data.domain.Page")
163-
public Module pageJacksonModule() {
164-
return new PageJacksonModule();
165-
}
166-
167-
@Bean
168-
@ConditionalOnClass(name = "org.springframework.data.domain.Page")
169-
public Module sortModule() {
170-
return new SortJacksonModule();
171-
}
172-
173158
@Bean
174159
@ConditionalOnMissingBean(FeignClientConfigurer.class)
175160
public FeignClientConfigurer feignClientConfigurer() {

spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/encoding/FeignPageableEncodingTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.springframework.boot.test.context.SpringBootTest;
3333
import org.springframework.cloud.netflix.ribbon.RibbonClient;
3434
import org.springframework.cloud.openfeign.EnableFeignClients;
35-
import org.springframework.cloud.openfeign.FeignClientsConfiguration;
3635
import org.springframework.cloud.openfeign.encoding.app.client.InvoiceClient;
3736
import org.springframework.cloud.openfeign.encoding.app.domain.Invoice;
3837
import org.springframework.cloud.openfeign.test.NoSecurityConfiguration;
@@ -59,6 +58,7 @@
5958
@SpringBootTest(classes = FeignPageableEncodingTests.Application.class,
6059
webEnvironment = RANDOM_PORT,
6160
value = { "feign.compression.request.enabled=true",
61+
"feign.autoconfiguration.jackson.enabled=true",
6262
"hystrix.command.default.execution.isolation.strategy=SEMAPHORE",
6363
"ribbon.OkToRetryOnAllOperations=false" })
6464
@RunWith(SpringJUnit4ClassRunner.class)
@@ -99,7 +99,7 @@ public void testPageable() {
9999
scanBasePackages = "org.springframework.cloud.openfeign.encoding.app",
100100
exclude = { RepositoryRestMvcAutoConfiguration.class })
101101
@EnableSpringDataWebSupport
102-
@Import({ NoSecurityConfiguration.class, FeignClientsConfiguration.class })
102+
@Import({ NoSecurityConfiguration.class })
103103
public static class Application {
104104

105105
}

0 commit comments

Comments
 (0)