diff --git a/spring-boot-actuator-docs/pom.xml b/spring-boot-actuator-docs/pom.xml index fac0fd5f0d9..1273fefc0cf 100644 --- a/spring-boot-actuator-docs/pom.xml +++ b/spring-boot-actuator-docs/pom.xml @@ -44,6 +44,11 @@ h2 provided + + com.jayway.jsonpath + json-path + provided + junit junit @@ -82,6 +87,10 @@ org.springframework.hateoas spring-hateoas + + org.springframework.plugin + spring-plugin-core + org.springframework.restdocs spring-restdocs-mockmvc diff --git a/spring-boot-actuator-docs/src/main/asciidoc/index.adoc b/spring-boot-actuator-docs/src/main/asciidoc/index.adoc index 0dc1aa09bcd..fcf66b8e721 100644 --- a/spring-boot-actuator-docs/src/main/asciidoc/index.adoc +++ b/spring-boot-actuator-docs/src/main/asciidoc/index.adoc @@ -58,7 +58,7 @@ HAL browser is not active). == Hypermedia Support If https://projects.spring.io/spring-hateoas[Spring HATEOAS] is enabled (i.e. if it is -on the classpath by default) then the Actuator endpoint responses are enhanced with +on the classpath by default) and `endpoints.hypermedia.enabled` is set to `true` then the Actuator endpoint responses are enhanced with hypermedia in the form of "links". The default media type for responses is http://stateless.co/hal_specification.html[HAL], resulting in each resource having an extra property called "_links". You can change the media type to another one supported by diff --git a/spring-boot-actuator-docs/src/restdoc/java/org/springframework/boot/actuate/hypermedia/HypermediaEndpointDocumentation.java b/spring-boot-actuator-docs/src/restdoc/java/org/springframework/boot/actuate/hypermedia/HypermediaEndpointDocumentation.java index 4c2b7a43e7f..9ac4f15b299 100644 --- a/spring-boot-actuator-docs/src/restdoc/java/org/springframework/boot/actuate/hypermedia/HypermediaEndpointDocumentation.java +++ b/spring-boot-actuator-docs/src/restdoc/java/org/springframework/boot/actuate/hypermedia/HypermediaEndpointDocumentation.java @@ -33,12 +33,13 @@ import org.springframework.test.web.servlet.MockMvc; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringRunner.class) @ContextConfiguration(classes = SpringBootHypermediaApplication.class, loader = SpringBootContextLoader.class) @WebAppConfiguration -@TestPropertySource(properties = "spring.jackson.serialization.indent_output=true") +@TestPropertySource(properties = { "spring.jackson.serialization.indent_output=true", "endpoints.hypermedia.enabled=true" }) @DirtiesContext @AutoConfigureMockMvc @AutoConfigureRestDocs("target/generated-snippets") @@ -56,7 +57,9 @@ public class HypermediaEndpointDocumentation { @Test public void metrics() throws Exception { this.mockMvc.perform(get("/metrics").accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andDo(document("metrics/hypermedia")); + .andExpect(status().isOk()) + .andExpect(jsonPath("$._links.self.href").value("http://localhost:8080/metrics")) + .andDo(document("metrics/hypermedia")); } @Test diff --git a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index e1b2c937bc8..6b884f9f68f 100644 --- a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -930,6 +930,7 @@ content into your application; rather pick only the properties that you need. # ENDPOINTS ({sc-spring-boot-actuator}/endpoint/AbstractEndpoint.{sc-ext}[AbstractEndpoint] subclasses) endpoints.enabled=true # Enable endpoints. endpoints.sensitive= # Default endpoint sensitive setting. + endpoints.hypermedia.enabled=false # Enable hypermedia support for endpoints. endpoints.actuator.enabled=true # Enable the endpoint. endpoints.actuator.path= # Endpoint URL path. endpoints.actuator.sensitive=false # Enable security on the endpoint. diff --git a/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc b/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc index 19c05edeea1..b83bbc4ad4e 100644 --- a/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc +++ b/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc @@ -205,7 +205,7 @@ For example, to mark _all_ endpoints as sensitive except `info`: === Hypermedia for actuator MVC endpoints If http://projects.spring.io/spring-hateoas[Spring HATEOAS] is on the classpath (e.g. through the `spring-boot-starter-hateoas` or if you are using -http://projects.spring.io/spring-data-rest[Spring Data REST]) then the HTTP endpoints +http://projects.spring.io/spring-data-rest[Spring Data REST]) and `endpoints.hypermedia.enabled` is set to `true` then the HTTP endpoints from the Actuator are enhanced with hypermedia links, and a "`discovery page`" is added with links to all the endpoints. The "`discovery page`" is available on `/actuator` by default. It is implemented as an endpoint, allowing properties to be used to configure