From 328ea26244a767000d8592fb2395b32f7a06612e Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Fri, 3 Jul 2020 15:53:09 +0200 Subject: [PATCH] DATAREST-1542 - Remove dependency to Spring WebMVC from core module. Finally remove the dependency to Spring WebMVC from Spring Data REST's core module. Removed previously deprecated methods and update test configuration applying customizations. Related tickets: DATAREST-1543. --- spring-data-rest-core/pom.xml | 7 ------ .../config/RepositoryRestConfiguration.java | 22 ---------------- .../webmvc/jpa/ProfileIntegrationTests.java | 10 ++++---- ...tEntityToJsonSchemaConverterUnitTests.java | 16 +++++++----- .../rest/tests/shop/ShopConfiguration.java | 25 ++++++++++--------- .../config/RepositoryCorsRegistry.java | 8 ++---- .../config/RepositoryRestConfigurer.java | 14 ++--------- .../RepositoryRestConfigurerDelegate.java | 14 ----------- .../RepositoryRestMvcConfiguration.java | 1 - .../WebMvcRepositoryRestConfiguration.java | 2 -- 10 files changed, 32 insertions(+), 87 deletions(-) rename {spring-data-rest-core/src/main/java/org/springframework/data/rest/core => spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc}/config/RepositoryCorsRegistry.java (78%) diff --git a/spring-data-rest-core/pom.xml b/spring-data-rest-core/pom.xml index 9665c1ee7..2d64e2a6e 100644 --- a/spring-data-rest-core/pom.xml +++ b/spring-data-rest-core/pom.xml @@ -34,13 +34,6 @@ ${spring-hateoas} - - - - org.springframework - spring-webmvc - - org.springframework.data spring-data-commons diff --git a/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/config/RepositoryRestConfiguration.java b/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/config/RepositoryRestConfiguration.java index 3514127a5..0c1b10fb1 100644 --- a/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/config/RepositoryRestConfiguration.java +++ b/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/config/RepositoryRestConfiguration.java @@ -33,7 +33,6 @@ import org.springframework.hateoas.server.core.EvoInflectorLinkRelationProvider; import org.springframework.http.MediaType; import org.springframework.util.Assert; import org.springframework.util.StringUtils; -import org.springframework.web.servlet.config.annotation.CorsRegistration; /** * Spring Data REST configuration options. @@ -65,7 +64,6 @@ public class RepositoryRestConfiguration { private ResourceMappingConfiguration repoMappings = new ResourceMappingConfiguration(); private RepositoryDetectionStrategy repositoryDetectionStrategy = RepositoryDetectionStrategies.DEFAULT; private boolean exposeRepositoryMethodsByDefault = true; - private RepositoryCorsRegistry corsRegistry = new RepositoryCorsRegistry(); /** * The {@link RelProvider} to be used to calculate the link relation defaults for repositories. @@ -633,26 +631,6 @@ public class RepositoryRestConfiguration { setExposeRepositoryMethodsByDefault(false); } - /** - * Returns the {@link RepositoryCorsRegistry} to configure Cross-origin resource sharing. - * - * @return the {@link RepositoryCorsRegistry}. - * @since 2.6 - * @see RepositoryCorsRegistry - * @see CorsRegistration - * @deprecated since 3.4. Rather implement - * {@code RepositoryRestConfigurer.configureRepositoryRestConfiguration(RepositoryRestConfiguration, CorsRegistry)} - * instead to get access to the registry. - */ - @Deprecated - public RepositoryCorsRegistry getCorsRegistry() { - return corsRegistry; - } - - protected void setCorsRegistry(RepositoryCorsRegistry corsRegistry) { - this.corsRegistry = corsRegistry; - } - /** * Returns the {@link EntityLookupRegistrar} to create custom {@link EntityLookup} instances registered in the * configuration. diff --git a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/test/java/org/springframework/data/rest/webmvc/jpa/ProfileIntegrationTests.java b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/test/java/org/springframework/data/rest/webmvc/jpa/ProfileIntegrationTests.java index cc136194b..928b546ca 100755 --- a/spring-data-rest-tests/spring-data-rest-tests-jpa/src/test/java/org/springframework/data/rest/webmvc/jpa/ProfileIntegrationTests.java +++ b/spring-data-rest-tests/spring-data-rest-tests-jpa/src/test/java/org/springframework/data/rest/webmvc/jpa/ProfileIntegrationTests.java @@ -22,8 +22,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.rest.core.config.RepositoryRestConfiguration; import org.springframework.data.rest.tests.AbstractControllerIntegrationTests; import org.springframework.data.rest.tests.TestMvcClient; import org.springframework.data.rest.webmvc.ProfileController; @@ -57,11 +57,11 @@ public class ProfileIntegrationTests extends AbstractControllerIntegrationTests private static final String ROOT_URI = "/api"; @Configuration - static class Config implements RepositoryRestConfigurer { + static class Config { - @Override - public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { - config.setBasePath(ROOT_URI); + @Bean + RepositoryRestConfigurer configurer() { + return RepositoryRestConfigurer.withConfig(config -> config.setBasePath(ROOT_URI)); } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-mongodb/src/test/java/org/springframework/data/rest/webmvc/json/PersistentEntityToJsonSchemaConverterUnitTests.java b/spring-data-rest-tests/spring-data-rest-tests-mongodb/src/test/java/org/springframework/data/rest/webmvc/json/PersistentEntityToJsonSchemaConverterUnitTests.java index ec7aec71b..00a3204df 100755 --- a/spring-data-rest-tests/spring-data-rest-tests-mongodb/src/test/java/org/springframework/data/rest/webmvc/json/PersistentEntityToJsonSchemaConverterUnitTests.java +++ b/spring-data-rest-tests/spring-data-rest-tests-mongodb/src/test/java/org/springframework/data/rest/webmvc/json/PersistentEntityToJsonSchemaConverterUnitTests.java @@ -28,6 +28,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.mapping.context.PersistentEntities; @@ -71,15 +72,18 @@ public class PersistentEntityToJsonSchemaConverterUnitTests { @Configuration @Import(RepositoryRestMvcConfiguration.class) - static class TestConfiguration implements RepositoryRestConfigurer { + static class TestConfiguration { - @Override - public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { + @Bean + public RepositoryRestConfigurer customizations() { - config.getMetadataConfiguration().registerJsonSchemaFormat(JsonSchemaFormat.EMAIL, EmailAddress.class); - config.getMetadataConfiguration().registerFormattingPatternFor("[A-Z]+", TypeWithPattern.class); + return RepositoryRestConfigurer.withConfig(config -> { - config.exposeIdsFor(Profile.class); + config.getMetadataConfiguration().registerJsonSchemaFormat(JsonSchemaFormat.EMAIL, EmailAddress.class); + config.getMetadataConfiguration().registerFormattingPatternFor("[A-Z]+", TypeWithPattern.class); + + config.exposeIdsFor(Profile.class); + }); } } diff --git a/spring-data-rest-tests/spring-data-rest-tests-shop/src/test/java/org/springframework/data/rest/tests/shop/ShopConfiguration.java b/spring-data-rest-tests/spring-data-rest-tests-shop/src/test/java/org/springframework/data/rest/tests/shop/ShopConfiguration.java index c6303be3e..c731451bb 100644 --- a/spring-data-rest-tests/spring-data-rest-tests-shop/src/test/java/org/springframework/data/rest/tests/shop/ShopConfiguration.java +++ b/spring-data-rest-tests/spring-data-rest-tests-shop/src/test/java/org/springframework/data/rest/tests/shop/ShopConfiguration.java @@ -23,7 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.map.repository.config.EnableMapRepositories; -import org.springframework.data.rest.core.config.RepositoryRestConfiguration; +import org.springframework.data.rest.core.config.EntityLookupRegistrar; import org.springframework.data.rest.tests.shop.Customer.Gender; import org.springframework.data.rest.tests.shop.Product.ProductNameOnlyProjection; import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer; @@ -53,7 +53,7 @@ public class ShopConfiguration { */ @Override public EntityModel process(EntityModel resource) { - resource.add(new Link("foo", "bar")); + resource.add(Link.of("foo", "bar")); return resource; } }; @@ -70,7 +70,7 @@ public class ShopConfiguration { */ @Override public EntityModel process(EntityModel resource) { - resource.add(new Link("alpha", "beta")); + resource.add(Link.of("alpha", "beta")); return resource; } }; @@ -98,16 +98,17 @@ public class ShopConfiguration { @Configuration static class SpringDataRestConfiguration implements RepositoryRestConfigurer { - /* - * (non-Javadoc) - * @see org.springframework.data.rest.webmvc.config.RepositoryRestConfigurerAdapter#configureRepositoryRestConfiguration(org.springframework.data.rest.core.config.RepositoryRestConfiguration) - */ - @Override - public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { + @Bean + RepositoryRestConfigurer configurer() { - config.withEntityLookup().forRepository(ProductRepository.class, Product::getName, ProductRepository::findByName); - config.withEntityLookup().forValueRepository(LineItemTypeRepository.class, LineItemType::getName, - LineItemTypeRepository::findByName); + return RepositoryRestConfigurer.withConfig(config -> { + + EntityLookupRegistrar lookup = config.withEntityLookup(); + + lookup.forRepository(ProductRepository.class, Product::getName, ProductRepository::findByName); + lookup.forValueRepository(LineItemTypeRepository.class, LineItemType::getName, + LineItemTypeRepository::findByName); + }); } } } diff --git a/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/config/RepositoryCorsRegistry.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryCorsRegistry.java similarity index 78% rename from spring-data-rest-core/src/main/java/org/springframework/data/rest/core/config/RepositoryCorsRegistry.java rename to spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryCorsRegistry.java index 1fcdeed78..e18b50c9e 100644 --- a/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/config/RepositoryCorsRegistry.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryCorsRegistry.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.data.rest.core.config; +package org.springframework.data.rest.webmvc.config; import java.util.Map; @@ -26,12 +26,8 @@ import org.springframework.web.servlet.config.annotation.CorsRegistry; * * @author Mark Paluch * @since 2.6 - * @deprecated since 3.4. Rather implement - * {@code RepositoryRestConfigurer.configureRepositoryRestConfiguration(RepositoryRestConfiguration, CorsRegistry)} - * instead to get access to the registry. */ -@Deprecated -public class RepositoryCorsRegistry extends CorsRegistry { +class RepositoryCorsRegistry extends CorsRegistry { /* (non-Javadoc) * @see org.springframework.web.servlet.config.annotation.CorsRegistry#getCorsConfigurations() diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestConfigurer.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestConfigurer.java index 2afcb662f..f1878c0eb 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestConfigurer.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestConfigurer.java @@ -54,10 +54,10 @@ public interface RepositoryRestConfigurer { /* * (non-Javadoc) - * @see org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer#configureRepositoryRestConfiguration(org.springframework.data.rest.core.config.RepositoryRestConfiguration) + * @see org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer#configureRepositoryRestConfiguration(org.springframework.data.rest.core.config.RepositoryRestConfiguration, org.springframework.web.servlet.config.annotation.CorsRegistry) */ @Override - public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { + public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) { consumer.accept(config); } }; @@ -88,16 +88,6 @@ public interface RepositoryRestConfigurer { }; } - /** - * Override this method to add additional configuration. - * - * @param config Main configuration bean. - * @deprecated since 3.4, implement - * {@link #configureRepositoryRestConfiguration(RepositoryRestConfiguration, CorsRegistry)} instead. - */ - @Deprecated - default void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {} - /** * Override this method to add additional configuration. * diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestConfigurerDelegate.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestConfigurerDelegate.java index 9cbe470a1..b23355b7b 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestConfigurerDelegate.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestConfigurerDelegate.java @@ -50,18 +50,6 @@ public class RepositoryRestConfigurerDelegate implements RepositoryRestConfigure this.delegates = delegates; } - /* - * (non-Javadoc) - * @see org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer#configureRepositoryRestConfiguration(org.springframework.data.rest.core.config.RepositoryRestConfiguration) - */ - @Override - public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { - - for (RepositoryRestConfigurer configurer : delegates) { - configurer.configureRepositoryRestConfiguration(config); - } - } - /* * (non-Javadoc) * @see org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer#configureRepositoryRestConfiguration(org.springframework.data.rest.core.config.RepositoryRestConfiguration, org.springframework.web.servlet.config.annotation.CorsRegistry) @@ -69,8 +57,6 @@ public class RepositoryRestConfigurerDelegate implements RepositoryRestConfigure @Override public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) { - configureRepositoryRestConfiguration(config); - for (RepositoryRestConfigurer configurer : delegates) { configurer.configureRepositoryRestConfiguration(config, cors); } diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java index ae48d066f..e8a3f18fb 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java @@ -56,7 +56,6 @@ import org.springframework.data.rest.core.UriToEntityConverter; import org.springframework.data.rest.core.config.MetadataConfiguration; import org.springframework.data.rest.core.config.Projection; import org.springframework.data.rest.core.config.ProjectionDefinitionConfiguration; -import org.springframework.data.rest.core.config.RepositoryCorsRegistry; import org.springframework.data.rest.core.config.RepositoryRestConfiguration; import org.springframework.data.rest.core.event.AnnotatedEventHandlerInvoker; import org.springframework.data.rest.core.event.ValidatingRepositoryEventListener; diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/WebMvcRepositoryRestConfiguration.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/WebMvcRepositoryRestConfiguration.java index 66be8c048..c0f3a1383 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/WebMvcRepositoryRestConfiguration.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/WebMvcRepositoryRestConfiguration.java @@ -20,7 +20,6 @@ import java.util.Map; import org.springframework.data.rest.core.config.EnumTranslationConfiguration; import org.springframework.data.rest.core.config.MetadataConfiguration; import org.springframework.data.rest.core.config.ProjectionDefinitionConfiguration; -import org.springframework.data.rest.core.config.RepositoryCorsRegistry; import org.springframework.data.rest.core.config.RepositoryRestConfiguration; import org.springframework.util.Assert; import org.springframework.web.cors.CorsConfiguration; @@ -54,7 +53,6 @@ class WebMvcRepositoryRestConfiguration extends RepositoryRestConfiguration impl Assert.notNull(registry, "CorsRegistry must not be null!"); this.registry = registry; - setCorsRegistry(registry); } private final RepositoryCorsRegistry registry;