From 07cb8f283629eb7b5d69f11c2006eac02c1ff94a Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 9 Oct 2014 13:33:56 +0100 Subject: [PATCH] Ensure that spring.data.rest.* configuration takes effect MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, RepositoryRestMvcBootConfiguration was not annotated with @Configuration. This meant that it was processed in lite mode. Crucially, in lite mode, there’s no proxying so each call to the config() @Bean method from within other @Bean methods resulted in the creation of a new RepositoryRestConfiguration instance. Furthermore, as each of these instances wasn’t a Spring bean the configuration properties were not applied. This commit updates RepositoryRestMvcBootConfiguration to annotate it with @Configuration so that it’s no longer processed in lite mode. It also updates the unit tests and the Spring Data REST sample to verify that the baseUri can be configured using application.properties. Fixes gh-1675 --- .../data/rest/RepositoryRestMvcAutoConfiguration.java | 1 + .../data/rest/RepositoryRestMvcAutoConfigurationTests.java | 7 ++++++- .../src/main/resources/application.properties | 1 + .../sample/data/jpa/SampleDataRestApplicationTests.java | 4 ++-- 4 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 spring-boot-samples/spring-boot-sample-data-rest/src/main/resources/application.properties diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfiguration.java index b6b85f62f0..72c285055a 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfiguration.java @@ -46,6 +46,7 @@ import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguratio @ConditionalOnClass(RepositoryRestMvcConfiguration.class) public class RepositoryRestMvcAutoConfiguration { + @Configuration static class RepositoryRestMvcBootConfiguration extends RepositoryRestMvcConfiguration { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfigurationTests.java index 78a9e1a53e..f89ba81964 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfigurationTests.java @@ -30,6 +30,7 @@ import org.springframework.boot.test.EnvironmentTestUtils; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.rest.core.config.RepositoryRestConfiguration; +import org.springframework.data.rest.webmvc.BaseUri; import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration; import org.springframework.mock.web.MockServletContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; @@ -66,7 +67,11 @@ public class RepositoryRestMvcAutoConfigurationTests { assertNotNull(this.context.getBean(RepositoryRestMvcConfiguration.class)); RepositoryRestConfiguration bean = this.context .getBean(RepositoryRestConfiguration.class); - assertEquals("Custom baseURI not set", URI.create("foo"), bean.getBaseUri()); + URI expectedUri = URI.create("foo"); + assertEquals("Custom baseURI not set", expectedUri, bean.getBaseUri()); + BaseUri baseUri = this.context.getBean(BaseUri.class); + assertEquals("Custom baseUri has not been applied to BaseUri bean", expectedUri, + baseUri.getUri()); } @Test diff --git a/spring-boot-samples/spring-boot-sample-data-rest/src/main/resources/application.properties b/spring-boot-samples/spring-boot-sample-data-rest/src/main/resources/application.properties new file mode 100644 index 0000000000..22a152b9fb --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-data-rest/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.data.rest.baseUri=/api \ No newline at end of file diff --git a/spring-boot-samples/spring-boot-sample-data-rest/src/test/java/sample/data/jpa/SampleDataRestApplicationTests.java b/spring-boot-samples/spring-boot-sample-data-rest/src/test/java/sample/data/jpa/SampleDataRestApplicationTests.java index 2cbbb97b17..200c4ef62e 100644 --- a/spring-boot-samples/spring-boot-sample-data-rest/src/test/java/sample/data/jpa/SampleDataRestApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-data-rest/src/test/java/sample/data/jpa/SampleDataRestApplicationTests.java @@ -69,7 +69,7 @@ public class SampleDataRestApplicationTests { public void findByNameAndCountry() throws Exception { this.mvc.perform( - get("/cities/search/findByNameAndCountryAllIgnoringCase?name=Melbourne&country=Australia")) + get("/api/cities/search/findByNameAndCountryAllIgnoringCase?name=Melbourne&country=Australia")) .andExpect(status().isOk()) .andExpect(jsonPath("_embedded.citys", hasSize(1))); } @@ -78,7 +78,7 @@ public class SampleDataRestApplicationTests { public void findByContaining() throws Exception { this.mvc.perform( - get("/cities/search/findByNameContainingAndCountryContainingAllIgnoringCase?name=&country=UK")) + get("/api/cities/search/findByNameContainingAndCountryContainingAllIgnoringCase?name=&country=UK")) .andExpect(status().isOk()) .andExpect(jsonPath("_embedded.citys", hasSize(3))); }