From 2fae4afe9576a5e246e4485b0d7527ff3bb347ba Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Wed, 13 Aug 2014 08:14:09 -0700 Subject: [PATCH] Ensure status in ErrorPageFilter defaults to 200 Fixes gh-1369. Note that this is caused by the ErrorPageFilter, so only a problem when deployed as a WAR. --- .../MetricFilterAutoConfiguration.java | 9 ++++++++- .../boot/context/web/ErrorPageFilter.java | 1 + .../boot/context/web/ErrorPageFilterTests.java | 15 +++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfiguration.java index 4cebd0a5996..ec625073f0e 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/MetricFilterAutoConfiguration.java @@ -93,10 +93,17 @@ public class MetricFilterAutoConfiguration { int status = getStatus(response); Object bestMatchingPattern = request .getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); + HttpStatus httpStatus = HttpStatus.OK; + try { + httpStatus = HttpStatus.valueOf(status); + } + catch (Exception e) { + // not convertible + } if (bestMatchingPattern != null) { suffix = bestMatchingPattern.toString().replaceAll("[{}]", "-"); } - else if (HttpStatus.valueOf(status).is4xxClientError()) { + else if (httpStatus.is4xxClientError()) { suffix = UNKNOWN_PATH_SUFFIX; } String gaugeKey = getKey("response" + suffix); diff --git a/spring-boot/src/main/java/org/springframework/boot/context/web/ErrorPageFilter.java b/spring-boot/src/main/java/org/springframework/boot/context/web/ErrorPageFilter.java index 1d74ec93779..f7c23c77bd0 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/web/ErrorPageFilter.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/web/ErrorPageFilter.java @@ -239,6 +239,7 @@ class ErrorPageFilter extends AbstractConfigurableEmbeddedServletContainer imple public ErrorWrapperResponse(HttpServletResponse response) { super(response); + this.status = response.getStatus(); } @Override diff --git a/spring-boot/src/test/java/org/springframework/boot/context/web/ErrorPageFilterTests.java b/spring-boot/src/test/java/org/springframework/boot/context/web/ErrorPageFilterTests.java index 32075143940..968df7f39ff 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/web/ErrorPageFilterTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/web/ErrorPageFilterTests.java @@ -205,6 +205,21 @@ public class ErrorPageFilterTests { assertTrue(this.response.isCommitted()); } + @Test + public void statusCode() throws Exception { + this.chain = new MockFilterChain() { + @Override + public void doFilter(ServletRequest request, ServletResponse response) + throws IOException, ServletException { + assertThat(((HttpServletResponse) response).getStatus(), equalTo(200)); + super.doFilter(request, response); + } + }; + this.filter.doFilter(this.request, this.response, this.chain); + assertThat(((HttpServletResponseWrapper) this.chain.getResponse()).getStatus(), + equalTo(200)); + } + @Test public void subClassExceptionError() throws Exception { this.filter.addErrorPages(new ErrorPage(RuntimeException.class, "/500"));