Support for parsed PathPatterns in Spring MVC
See gh-24945
This commit is contained in:
@@ -68,6 +68,7 @@ import org.springframework.web.servlet.support.SessionFlashMapManager;
|
||||
import org.springframework.web.servlet.theme.FixedThemeResolver;
|
||||
import org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator;
|
||||
import org.springframework.web.servlet.view.InternalResourceViewResolver;
|
||||
import org.springframework.web.util.pattern.PathPatternParser;
|
||||
|
||||
/**
|
||||
* A {@code MockMvcBuilder} that accepts {@code @Controller} registrations
|
||||
@@ -126,6 +127,9 @@ public class StandaloneMockMvcBuilder extends AbstractMockMvcBuilder<StandaloneM
|
||||
@Nullable
|
||||
private FlashMapManager flashMapManager;
|
||||
|
||||
@Nullable
|
||||
private PathPatternParser patternParser;
|
||||
|
||||
private boolean useSuffixPatternMatch = true;
|
||||
|
||||
private boolean useTrailingSlashPatternMatch = true;
|
||||
@@ -213,7 +217,7 @@ public class StandaloneMockMvcBuilder extends AbstractMockMvcBuilder<StandaloneM
|
||||
@Nullable String[] pathPatterns, HandlerInterceptor... interceptors) {
|
||||
|
||||
for (HandlerInterceptor interceptor : interceptors) {
|
||||
this.mappedInterceptors.add(new MappedInterceptor(pathPatterns, interceptor));
|
||||
this.mappedInterceptors.add(new MappedInterceptor(pathPatterns, null, interceptor));
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@@ -306,6 +310,17 @@ public class StandaloneMockMvcBuilder extends AbstractMockMvcBuilder<StandaloneM
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable URL path matching with parsed
|
||||
* {@link org.springframework.web.util.pattern.PathPattern PathPatterns}
|
||||
* instead of String pattern matching with a {@link org.springframework.util.PathMatcher}.
|
||||
* @param parser the parser to use
|
||||
* @since 5.3
|
||||
*/
|
||||
public void setPatternParser(PathPatternParser parser) {
|
||||
this.patternParser = parser;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether to use suffix pattern match (".*") when matching patterns to
|
||||
* requests. If enabled a method mapped to "/users" also matches to "/users.*".
|
||||
@@ -450,15 +465,21 @@ public class StandaloneMockMvcBuilder extends AbstractMockMvcBuilder<StandaloneM
|
||||
public RequestMappingHandlerMapping getHandlerMapping(
|
||||
FormattingConversionService mvcConversionService,
|
||||
ResourceUrlProvider mvcResourceUrlProvider) {
|
||||
|
||||
RequestMappingHandlerMapping handlerMapping = handlerMappingFactory.get();
|
||||
handlerMapping.setEmbeddedValueResolver(new StaticStringValueResolver(placeholderValues));
|
||||
handlerMapping.setUseSuffixPatternMatch(useSuffixPatternMatch);
|
||||
if (patternParser != null) {
|
||||
handlerMapping.setPatternParser(patternParser);
|
||||
}
|
||||
else {
|
||||
handlerMapping.setUseSuffixPatternMatch(useSuffixPatternMatch);
|
||||
if (removeSemicolonContent != null) {
|
||||
handlerMapping.setRemoveSemicolonContent(removeSemicolonContent);
|
||||
}
|
||||
}
|
||||
handlerMapping.setUseTrailingSlashMatch(useTrailingSlashPatternMatch);
|
||||
handlerMapping.setOrder(0);
|
||||
handlerMapping.setInterceptors(getInterceptors(mvcConversionService, mvcResourceUrlProvider));
|
||||
if (removeSemicolonContent != null) {
|
||||
handlerMapping.setRemoveSemicolonContent(removeSemicolonContent);
|
||||
}
|
||||
return handlerMapping;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user