diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/servlet/WebMvcTags.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/servlet/WebMvcTags.java index b3218fd31e9..f469b6ba72f 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/servlet/WebMvcTags.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/web/servlet/WebMvcTags.java @@ -77,8 +77,9 @@ public final class WebMvcTags { /** * Creates a {@code uri} tag based on the URI of the given {@code request}. Uses the * {@link HandlerMapping#BEST_MATCHING_PATTERN_ATTRIBUTE} best matching pattern if - * available, falling back to the request's {@link HttpServletRequest#getPathInfo() - * path info} if necessary. + * available. Falling back to {@code REDIRECTION} for 3xx responses, {@code NOT_FOUND} + * for 404 responses, {@code root} for requests with no path info, and {@code UNKNOWN} + * for all other requests. * @param request the request * @param response the response * @return the uri tag derived from the request @@ -102,7 +103,6 @@ public final class WebMvcTags { if (pathInfo.isEmpty()) { return URI_ROOT; } - return Tag.of("uri", pathInfo); } return URI_UNKNOWN; } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/servlet/WebMvcTagsTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/servlet/WebMvcTagsTests.java index c85b4537623..f871b918a09 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/servlet/WebMvcTagsTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/servlet/WebMvcTagsTests.java @@ -38,12 +38,6 @@ public class WebMvcTagsTests { private final MockHttpServletResponse response = new MockHttpServletResponse(); - @Test - public void uriTrailingSlashesAreSuppressed() { - this.request.setPathInfo("//spring/"); - assertThat(WebMvcTags.uri(this.request, null).getValue()).isEqualTo("/spring"); - } - @Test public void uriTagValueIsBestMatchingPatternWhenAvailable() { this.request.setAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE, @@ -53,6 +47,23 @@ public class WebMvcTagsTests { assertThat(tag.getValue()).isEqualTo("/spring"); } + @Test + public void uriTagValueIsRootWhenRequestHasNoPatternOrPathInfo() { + assertThat(WebMvcTags.uri(this.request, null).getValue()).isEqualTo("root"); + } + + @Test + public void uriTagValueIsRootWhenRequestHasNoPatternAndSlashPathInfo() { + this.request.setPathInfo("/"); + assertThat(WebMvcTags.uri(this.request, null).getValue()).isEqualTo("root"); + } + + @Test + public void uriTagValueIsUnknownWhenRequestHasNoPatternAndNonRootPathInfo() { + this.request.setPathInfo("/example"); + assertThat(WebMvcTags.uri(this.request, null).getValue()).isEqualTo("UNKNOWN"); + } + @Test public void uriTagValueIsRedirectionWhenResponseStatusIs3xx() { this.response.setStatus(301);