Skip to content

Commit 753886f

Browse files
committed
Forward StringValueResolver to DelegatingHandlerMappings targets.
RepositoryRestMvcConfiguration now implements EmbeddedValueResolver to forward the StringValueResolver given to both BasePathAwareHandlerMapping and RepositoryRestHandlerMapping. Related ticket: #2157.
1 parent 070d284 commit 753886f

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("jakarta.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, //
@@ -282,6 +285,15 @@ public void setBeanClassLoader(ClassLoader classLoader) {
282285
this.beanClassLoader = classLoader;
283286
}
284287

288+
/*
289+
* (non-Javadoc)
290+
* @see org.springframework.context.EmbeddedValueResolverAware#setEmbeddedValueResolver(org.springframework.util.StringValueResolver)
291+
*/
292+
@Override
293+
public void setEmbeddedValueResolver(StringValueResolver resolver) {
294+
this.stringValueResolver = resolver;
295+
}
296+
285297
@Bean
286298
public Repositories repositories() {
287299
return new Repositories(applicationContext);
@@ -684,12 +696,14 @@ public DelegatingHandlerMapping restHandlerMapping(Repositories repositories,
684696
repositoryMapping.setApplicationContext(applicationContext);
685697
repositoryMapping.setCorsConfigurations(corsConfigurations);
686698
repositoryMapping.setPatternParser(parser);
699+
repositoryMapping.setEmbeddedValueResolver(stringValueResolver);
687700
repositoryMapping.afterPropertiesSet();
688701

689702
BasePathAwareHandlerMapping basePathMapping = new BasePathAwareHandlerMapping(repositoryRestConfiguration);
690703
basePathMapping.setApplicationContext(applicationContext);
691704
basePathMapping.setCorsConfigurations(corsConfigurations);
692705
basePathMapping.setPatternParser(parser);
706+
basePathMapping.setEmbeddedValueResolver(stringValueResolver);
693707
basePathMapping.afterPropertiesSet();
694708

695709
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 // #2157
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)