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 f78d7dc7577..464eafeb9bc 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 @@ -75,9 +75,6 @@ public class EndpointWebMvcChildContextConfiguration { @Value("${error.path:/error}") private String errorPath = "/error"; - @Autowired(required = false) - private List mappingCustomizers; - @Configuration protected static class ServerCustomization implements EmbeddedServletContainerCustomizer, Ordered { @@ -144,11 +141,12 @@ 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 - public ManagementErrorEndpoint errorEndpoint(final ErrorAttributes errorAttributes) { + @ConditionalOnBean(ErrorAttributes.class) + public ManagementErrorEndpoint errorEndpoint(ErrorAttributes errorAttributes) { return new ManagementErrorEndpoint(this.errorPath, 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 ae574b6cd92..2b7b16e01eb 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; @@ -76,6 +77,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; @@ -146,6 +148,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("{\"timestamp\"")); List interceptors = (List) ReflectionTestUtils.getField( this.applicationContext.getBean(EndpointHandlerMapping.class), "interceptors"); @@ -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();