Im Grunde geht’s sogar um zwei Themen, die beide relativ unklar sind, wenn man sich die Einträge auf Stack Overflow ansieht:
- wie pretty-printe ich den (JSON-)Output eines Spring-Endpoints
- wie überschreibe ich Default-Endpoints (denn das kann eine Lösung für 1. sein)
Bspw. hier, hier, hier, hier. Es gibt dort einige Lösungsvorschläge, mehr oder weniger aufwändig, viele für Spring Boot 1.x – hier eine weitere (für Spring Boot 2), imho sehr elegante (mit viel Input von Nils!):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
@Component @WebEndpoint(id = "prettyhealth") public class PrettyHealthEndpoint { private final HealthEndpoint healthEndpoint; private final ObjectMapper objectMapper; @Autowired public PrettyHealthEndpoint(HealthEndpoint healthEndpoint, ObjectMapper objectMapper) { this.healthEndpoint = healthEndpoint; this.objectMapper = objectMapper; } @ReadOperation(produces = "application/json") public String getHealthJson() throws JsonProcessingException { Health health = healthEndpoint.health(); ObjectWriter writer = objectMapper.writerWithDefaultPrettyPrinter(); return writer.writeValueAsString(health); } @ReadOperation public String prettyHealth() throws JsonProcessingException { return "<html><body><pre>" + getHealthJson() + "</pre></body></html>"; } } |
Dann wird /health
auf /internal/health
(oder irgendwas) umgeleitet, und danach /prettyhealth
auf /health
:
1 2 3 4 |
# application.properties: management.endpoints.web.exposure.include=prettyhealth management.endpoints.web.path-mapping.health=internal/health management.endpoints.web.path-mapping.prettyhealth=/health |
et voilà.