Skip to content

Commit f89a458

Browse files
committed
Forward StringValueResolver to DelegatingHandlerMappings targets.
RepositoryRestMvcConfiguration now implements EmbeddedValueResolver to forward the StringValueResolver given to both BasePathAwareHandlerMapping and RepositoryRestHandlerMapping. Related ticket: #2087.
1 parent 86ff61c commit f89a458

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.springframework.beans.factory.ObjectProvider;
3434
import org.springframework.beans.factory.annotation.Qualifier;
3535
import org.springframework.context.ApplicationContext;
36+
import org.springframework.context.EmbeddedValueResolverAware;
3637
import org.springframework.context.annotation.Bean;
3738
import org.springframework.context.annotation.Configuration;
3839
import org.springframework.context.annotation.Import;
@@ -119,6 +120,7 @@
119120
import org.springframework.http.server.ServerHttpRequest;
120121
import org.springframework.plugin.core.PluginRegistry;
121122
import org.springframework.util.ClassUtils;
123+
import org.springframework.util.StringValueResolver;
122124
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
123125
import org.springframework.web.cors.CorsConfiguration;
124126
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
@@ -155,7 +157,7 @@
155157
SpringDataJacksonConfiguration.class, //
156158
EnableSpringDataWebSupport.QuerydslActivator.class })
157159
public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebConfiguration
158-
implements BeanClassLoaderAware {
160+
implements BeanClassLoaderAware, EmbeddedValueResolverAware {
159161

160162
private static final boolean IS_JPA_AVAILABLE = ClassUtils.isPresent("javax.persistence.EntityManager",
161163
RepositoryRestMvcConfiguration.class.getClassLoader());
@@ -196,6 +198,7 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon
196198
private final Lazy<HateoasSortHandlerMethodArgumentResolver> sortResolver;
197199

198200
private ClassLoader beanClassLoader;
201+
private StringValueResolver stringValueResolver;
199202

200203
public RepositoryRestMvcConfiguration( //
201204
ApplicationContext context, //
@@ -286,6 +289,15 @@ public void setBeanClassLoader(ClassLoader classLoader) {
286289
this.beanClassLoader = classLoader;
287290
}
288291

292+
/*
293+
* (non-Javadoc)
294+
* @see org.springframework.context.EmbeddedValueResolverAware#setEmbeddedValueResolver(org.springframework.util.StringValueResolver)
295+
*/
296+
@Override
297+
public void setEmbeddedValueResolver(StringValueResolver resolver) {
298+
this.stringValueResolver = resolver;
299+
}
300+
289301
@Bean
290302
public Repositories repositories() {
291303
return new Repositories(applicationContext);
@@ -688,12 +700,14 @@ public DelegatingHandlerMapping restHandlerMapping(Repositories repositories,
688700
repositoryMapping.setApplicationContext(applicationContext);
689701
repositoryMapping.setCorsConfigurations(corsConfigurations);
690702
repositoryMapping.setPatternParser(parser);
703+
repositoryMapping.setEmbeddedValueResolver(stringValueResolver);
691704
repositoryMapping.afterPropertiesSet();
692705

693706
BasePathAwareHandlerMapping basePathMapping = new BasePathAwareHandlerMapping(repositoryRestConfiguration);
694707
basePathMapping.setApplicationContext(applicationContext);
695708
basePathMapping.setCorsConfigurations(corsConfigurations);
696709
basePathMapping.setPatternParser(parser);
710+
basePathMapping.setEmbeddedValueResolver(stringValueResolver);
697711
basePathMapping.afterPropertiesSet();
698712

699713
List<HandlerMapping> mappings = new ArrayList<>();

spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvConfigurationIntegrationTests.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@
6161
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
6262
import org.springframework.test.util.ReflectionTestUtils;
6363
import org.springframework.util.MultiValueMap;
64+
import org.springframework.web.servlet.HandlerMapping;
65+
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
6466
import org.springframework.web.util.UriComponentsBuilder;
6567

6668
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -232,6 +234,24 @@ void appliesLinkCollectorCustomizer() {
232234
assertThat(factory).isEqualTo(ExtendingConfiguration.collector);
233235
}
234236

237+
@Test // #2087
238+
void registersEmbeddedValueResolverForHandlerMappings() {
239+
240+
DelegatingHandlerMapping mapping = context.getBean(DelegatingHandlerMapping.class);
241+
242+
List<HandlerMapping> delegates = mapping.getDelegates();
243+
244+
assertThat(delegates).hasSize(2);
245+
assertThat(delegates).allMatch(it -> {
246+
247+
if (!(it instanceof RequestMappingHandlerMapping)) {
248+
return false;
249+
}
250+
251+
return ReflectionTestUtils.getField(it, "embeddedValueResolver") != null;
252+
});
253+
}
254+
235255
private static ObjectMapper getObjectMapper() {
236256

237257
AbstractJackson2HttpMessageConverter converter = context.getBean("halJacksonHttpMessageConverter",

0 commit comments

Comments
 (0)