diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcChildContextConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcChildContextConfiguration.java index 7ea6cac1c9..bcd7f571ae 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcChildContextConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcChildContextConfiguration.java @@ -115,12 +115,13 @@ public class EndpointWebMvcChildContextConfiguration { /* * The error controller is present but not mapped as an endpoint in this context - * because of the DispatcherServlet having had it's HandlerMapping explicitly - * disabled. So we expose the same feature but only for machine endpoints. + * because of the DispatcherServlet having had its HandlerMapping explicitly disabled. + * So we expose the same feature but only for machine endpoints. */ @Bean + @ConditionalOnBean(ErrorAttributes.class) public ManagementErrorEndpoint errorEndpoint(ServerProperties serverProperties, - final ErrorAttributes errorAttributes) { + ErrorAttributes errorAttributes) { return new ManagementErrorEndpoint(serverProperties.getError().getPath(), errorAttributes); } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfigurationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfigurationTests.java index f20f932a8c..518aa6f961 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfigurationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfigurationTests.java @@ -27,6 +27,7 @@ import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.hamcrest.Matcher; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -77,6 +78,7 @@ import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.startsWith; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; @@ -145,6 +147,7 @@ public class EndpointWebMvcAutoConfigurationTests { assertContent("/endpoint", ports.get().server, null); assertContent("/controller", ports.get().management, null); assertContent("/endpoint", ports.get().management, "endpointoutput"); + assertContent("/error", ports.get().management, startsWith("{")); ApplicationContext managementContext = this.applicationContext .getBean(ManagementContextResolver.class).getApplicationContext(); List interceptors = (List) ReflectionTestUtils.getField( @@ -154,6 +157,17 @@ public class EndpointWebMvcAutoConfigurationTests { assertAllClosed(); } + @Test + public void onDifferentPortWithoutErrorMvcAutoConfiguration() throws Exception { + this.applicationContext.register(RootConfig.class, EndpointConfig.class, + DifferentPortConfig.class, BaseConfiguration.class, + EndpointWebMvcAutoConfiguration.class); + this.applicationContext.refresh(); + assertContent("/error", ports.get().management, null); + this.applicationContext.close(); + assertAllClosed(); + } + @Test public void onDifferentPortInServletContainer() throws Exception { this.applicationContext.register(RootConfig.class, EndpointConfig.class, @@ -378,6 +392,7 @@ public class EndpointWebMvcAutoConfigurationTests { assertContent("/endpoint", ports.get().management, null); } + @SuppressWarnings("unchecked") public void assertContent(String url, int port, Object expected) throws Exception { SimpleClientHttpRequestFactory clientHttpRequestFactory = new SimpleClientHttpRequestFactory(); ClientHttpRequest request = clientHttpRequestFactory @@ -387,7 +402,12 @@ public class EndpointWebMvcAutoConfigurationTests { try { String actual = StreamUtils.copyToString(response.getBody(), Charset.forName("UTF-8")); - assertThat(actual, equalTo(expected)); + if (expected instanceof Matcher) { + assertThat(actual, is((Matcher) expected)); + } + else { + assertThat(actual, equalTo(expected)); + } } finally { response.close();