diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/HalJsonMvcEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/HalJsonMvcEndpoint.java index 15964d73b9..cb16523580 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/HalJsonMvcEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/mvc/HalJsonMvcEndpoint.java @@ -87,6 +87,11 @@ public class HalJsonMvcEndpoint extends WebMvcConfigurerAdapter return new ResourceSupport(); } + @RequestMapping(path = "/", produces = MediaType.APPLICATION_JSON_VALUE) + public String forward() { + return "redirect:" + this.managementServletContext.getContextPath() + this.path; + } + public void setPath(String path) { this.path = path; } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/HalBrowserMvcEndpointManagementContextPathIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/HalBrowserMvcEndpointManagementContextPathIntegrationTests.java index 9c5e182d46..f1978d945b 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/HalBrowserMvcEndpointManagementContextPathIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/HalBrowserMvcEndpointManagementContextPathIntegrationTests.java @@ -39,6 +39,7 @@ import org.springframework.web.context.WebApplicationContext; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -75,6 +76,13 @@ public class HalBrowserMvcEndpointManagementContextPathIntegrationTests { .andExpect(status().isOk()).andExpect(jsonPath("$._links").exists()); } + @Test + public void redirectJson() throws Exception { + this.mockMvc.perform(get("/admin/").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isFound()) + .andExpect(header().string("location", "/admin")); + } + @Test public void actuatorHomeHtml() throws Exception { this.mockMvc.perform(get("/admin/").accept(MediaType.TEXT_HTML)) diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointIntegrationTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointIntegrationTests.java index fe69c09b3a..2b2a54023d 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointIntegrationTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/mvc/MvcEndpointIntegrationTests.java @@ -124,7 +124,7 @@ public class MvcEndpointIntegrationTests { "management.context-path:/management"); MockMvc mockMvc = createSecureMockMvc(); mockMvc.perform(get("/management/info")).andExpect(status().isOk()); - mockMvc.perform(get("/management/")).andExpect(status().isOk()); + mockMvc.perform(get("/management")).andExpect(status().isOk()); } @Test