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.
This commit is contained in:
Oliver Drotbohm
2020-07-03 15:53:09 +02:00
parent 3af99eba1f
commit 328ea26244
10 changed files with 32 additions and 87 deletions

View File

@@ -34,13 +34,6 @@
<version>${spring-hateoas}</version>
</dependency>
<!-- Temporary as we should actually avoid that -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>

View File

@@ -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.

View File

@@ -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));
}
}

View File

@@ -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);
});
}
}

View File

@@ -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<LineItem> process(EntityModel<LineItem> 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<ProductNameOnlyProjection> process(EntityModel<Product.ProductNameOnlyProjection> 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);
});
}
}
}

View File

@@ -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()

View File

@@ -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.
*

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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;