From 5cf401758d5da6ed5b53e27b6116d47ca9e34d3e Mon Sep 17 00:00:00 2001 From: crapxxi Date: Tue, 22 Sep 2026 00:34:01 +0500 Subject: [PATCH] Reuse cached PathPattern See gh-51852 Signed-off-by: crapxxi --- .../AbstractWebMvcEndpointHandlerMapping.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/module/spring-boot-webmvc/src/main/java/org/springframework/boot/webmvc/actuate/endpoint/web/AbstractWebMvcEndpointHandlerMapping.java b/module/spring-boot-webmvc/src/main/java/org/springframework/boot/webmvc/actuate/endpoint/web/AbstractWebMvcEndpointHandlerMapping.java index 60b642d5444..db3c9e04b78 100644 --- a/module/spring-boot-webmvc/src/main/java/org/springframework/boot/webmvc/actuate/endpoint/web/AbstractWebMvcEndpointHandlerMapping.java +++ b/module/spring-boot-webmvc/src/main/java/org/springframework/boot/webmvc/actuate/endpoint/web/AbstractWebMvcEndpointHandlerMapping.java @@ -78,7 +78,6 @@ import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; import org.springframework.web.util.ServletRequestPathUtils; import org.springframework.web.util.pattern.PathPattern; -import org.springframework.web.util.pattern.PathPatternParser; /** * A custom {@link HandlerMapping} that makes {@link ExposableWebEndpoint web endpoints} @@ -196,7 +195,7 @@ public abstract class AbstractWebMvcEndpointHandlerMapping extends RequestMappin protected void registerMapping(ExposableWebEndpoint endpoint, WebOperationRequestPredicate predicate, WebOperation operation, String path) { ServletWebOperation servletWebOperation = wrapServletWebOperation(endpoint, operation, - new ServletWebOperationAdapter(operation, getPatternParser())); + new ServletWebOperationAdapter(operation)); registerMapping(createRequestMappingInfo(predicate, path), new OperationHandler(servletWebOperation), this.handleMethod); } @@ -337,11 +336,8 @@ public abstract class AbstractWebMvcEndpointHandlerMapping extends RequestMappin private final WebOperation operation; - private final @Nullable PathPatternParser patternParser; - - ServletWebOperationAdapter(WebOperation operation, @Nullable PathPatternParser patternParser) { + ServletWebOperationAdapter(WebOperation operation) { this.operation = operation; - this.patternParser = patternParser; } @Override @@ -397,10 +393,10 @@ public abstract class AbstractWebMvcEndpointHandlerMapping extends RequestMappin } private Object getRemainingPathSegments(HttpServletRequest request) { - Assert.state(this.patternParser != null, "'patternParser' must not be null"); - String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); - Assert.state(pattern != null, "'pattern' must not be null"); - PathPattern pathPattern = this.patternParser.parse(pattern); + PathPattern pathPattern = (PathPattern) request + .getAttribute(HandlerMapping.BEST_MATCHING_PATH_PATTERN_ATTRIBUTE); + Assert.state(pathPattern != null, "'pathPattern' must not be null"); + if (pathPattern.hasPatternSyntax()) { String remainingSegments = pathPattern .extractPathWithinPattern( @@ -408,6 +404,7 @@ public abstract class AbstractWebMvcEndpointHandlerMapping extends RequestMappin .value(); return tokenizePathSegments(remainingSegments); } + return tokenizePathSegments(pathPattern.toString()); }