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 26b74a5e67..fcee87db73 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 @@ -68,11 +68,11 @@ public final class WebMvcTags { */ public static Tag uri(HttpServletRequest request, HttpServletResponse response) { if (response != null) { - HttpStatus status = HttpStatus.valueOf(response.getStatus()); - if (status.is3xxRedirection()) { + HttpStatus status = extractStatus(response); + if (status != null && status.is3xxRedirection()) { return Tag.of("uri", "REDIRECTION"); } - if (status.equals(HttpStatus.NOT_FOUND)) { + if (HttpStatus.NOT_FOUND.equals(status)) { return Tag.of("uri", "NOT_FOUND"); } } @@ -87,6 +87,15 @@ public final class WebMvcTags { return Tag.of("uri", uri.isEmpty() ? "root" : uri); } + private static HttpStatus extractStatus(HttpServletResponse response) { + try { + return HttpStatus.valueOf(response.getStatus()); + } + catch (IllegalArgumentException ex) { + return null; + } + } + /** * Creates a {@code exception} tag based on the {@link Class#getSimpleName() simple * name} of the class of the given {@code exception}. 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 new file mode 100644 index 0000000000..61491afa04 --- /dev/null +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/servlet/WebMvcTagsTests.java @@ -0,0 +1,60 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.endpoint.web.servlet; + +import io.micrometer.core.instrument.Tag; +import org.junit.Test; + +import org.springframework.boot.actuate.metrics.web.servlet.WebMvcTags; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link WebMvcTags}. + * + * @author Andy Wilkinson + */ +public class WebMvcTagsTests { + + private final MockHttpServletRequest request = new MockHttpServletRequest(); + + private final MockHttpServletResponse response = new MockHttpServletResponse(); + + @Test + public void uriTagValueIsRedirectionWhenResponseStatusIs3xx() { + this.response.setStatus(301); + Tag tag = WebMvcTags.uri(this.request, this.response); + assertThat(tag.getValue()).isEqualTo("REDIRECTION"); + } + + @Test + public void uriTagValueIsNotFoundWhenResponseStatusIs404() { + this.response.setStatus(404); + Tag tag = WebMvcTags.uri(this.request, this.response); + assertThat(tag.getValue()).isEqualTo("NOT_FOUND"); + } + + @Test + public void uriTagToleratesCustomResponseStatus() { + this.response.setStatus(601); + Tag tag = WebMvcTags.uri(this.request, this.response); + assertThat(tag.getValue()).isEqualTo("/"); + } + +}