Skip to content

Commit b9c0293

Browse files
committed
Let DelegatingHandlerMapping implement HandlerMapping directly.
We actually do not want to inherit all the functionality implemented in AbstractHandlerMapping. The sole reason we did so before was to override the method to propagate the PathPatternResolver to the downstream HandlerMappings. We now just declare the method on DHM directly. Fixes GH-1955.
1 parent 72ff0c7 commit b9c0293

File tree

2 files changed

+13
-16
lines changed

2 files changed

+13
-16
lines changed

spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/DelegatingHandlerMapping.java

+10-13
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@
4141
* @author Oliver Gierke
4242
* @soundtrack Benny Greb - Stabila (Moving Parts)
4343
*/
44-
class DelegatingHandlerMapping extends AbstractHandlerMapping
45-
implements org.springframework.data.rest.webmvc.support.DelegatingHandlerMapping {
44+
class DelegatingHandlerMapping
45+
implements org.springframework.data.rest.webmvc.support.DelegatingHandlerMapping, Ordered {
4646

4747
private final List<HandlerMapping> delegates;
4848

@@ -58,22 +58,19 @@ public DelegatingHandlerMapping(List<HandlerMapping> delegates) {
5858
this.delegates = delegates;
5959
}
6060

61-
@java.lang.SuppressWarnings("all")
62-
public List<HandlerMapping> getDelegates() {
63-
return this.delegates;
64-
}
65-
66-
@Override
67-
public void setPatternParser(PathPatternParser parser) {
68-
69-
super.setPatternParser(parser);
61+
void setPatternParser(PathPatternParser parser) {
7062

7163
delegates.stream() //
7264
.filter(AbstractHandlerMapping.class::isInstance) //
7365
.map(AbstractHandlerMapping.class::cast) //
7466
.forEach(it -> it.setPatternParser(parser));
7567
}
7668

69+
@SuppressWarnings("all")
70+
public List<HandlerMapping> getDelegates() {
71+
return this.delegates;
72+
}
73+
7774
/*
7875
* (non-Javadoc)
7976
* @see java.lang.Iterable#iterator()
@@ -94,10 +91,10 @@ public int getOrder() {
9491

9592
/*
9693
* (non-Javadoc)
97-
* @see org.springframework.web.servlet.handler.AbstractHandlerMapping#getHandlerInternal(javax.servlet.http.HttpServletRequest)
94+
* @see org.springframework.web.servlet.HandlerMapping#getHandler(javax.servlet.http.HttpServletRequest)
9895
*/
9996
@Override
100-
protected Object getHandlerInternal(HttpServletRequest request) throws Exception {
97+
public HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {
10198
return HandlerSelectionResult.from(request, delegates).resultOrException();
10299
}
103100

spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon
183183
private Lazy<BaseUri> baseUri;
184184
private Lazy<RepositoryResourceMappings> resourceMappings;
185185
private Lazy<Repositories> repositories;
186-
private Lazy<AbstractHandlerMapping> restHandlerMapping;
186+
private Lazy<DelegatingHandlerMapping> restHandlerMapping;
187187
private Lazy<ResourceMetadataHandlerMethodArgumentResolver> resourceMetadataHandlerMethodArgumentResolver;
188188
private Lazy<ExcerptProjector> excerptProjector;
189189
private Lazy<PersistentEntities> persistentEntities;
@@ -241,7 +241,7 @@ public RepositoryRestMvcConfiguration( //
241241
this.baseUri = Lazy.of(() -> context.getBean(BaseUri.class));
242242
this.resourceMappings = Lazy.of(() -> context.getBean(RepositoryResourceMappings.class));
243243
this.repositories = Lazy.of(() -> context.getBean(Repositories.class));
244-
this.restHandlerMapping = Lazy.of(() -> context.getBean("restHandlerMapping", AbstractHandlerMapping.class));
244+
this.restHandlerMapping = Lazy.of(() -> context.getBean("restHandlerMapping", DelegatingHandlerMapping.class));
245245
this.resourceMetadataHandlerMethodArgumentResolver = Lazy
246246
.of(() -> context.getBean(ResourceMetadataHandlerMethodArgumentResolver.class));
247247
this.excerptProjector = Lazy.of(() -> context.getBean(ExcerptProjector.class));
@@ -638,7 +638,7 @@ public RequestMappingHandlerAdapter repositoryExporterHandlerAdapter(
638638
* @return
639639
*/
640640
@Bean
641-
public AbstractHandlerMapping restHandlerMapping(Repositories repositories,
641+
public DelegatingHandlerMapping restHandlerMapping(Repositories repositories,
642642
RepositoryResourceMappings resourceMappings, Optional<JpaHelper> jpaHelper,
643643
RepositoryRestConfiguration repositoryRestConfiguration, CorsConfigurationAware corsRestConfiguration) {
644644

0 commit comments

Comments
 (0)