Tolerate custom response status in WebMvcTags

Closes gh-11263
pull/11327/head
Andy Wilkinson 7 years ago
parent 58d1f99a1e
commit 04068ee792

@ -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}.

@ -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("/");
}
}
Loading…
Cancel
Save