diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthEndpointSupport.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthEndpointSupport.java index c82e6201382..848f1786c18 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthEndpointSupport.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthEndpointSupport.java @@ -112,10 +112,12 @@ abstract class HealthEndpointSupport { Map contributions = new LinkedHashMap<>(); for (NamedContributor namedContributor : namedContributors) { String name = namedContributor.getName(); + C contributor = namedContributor.getContributor(); if (group.isMember(name)) { - T contribution = getContribution(apiVersion, group, namedContributor.getContributor(), showComponents, - showDetails, null); - contributions.put(name, contribution); + T contribution = getContribution(apiVersion, group, contributor, showComponents, showDetails, null); + if (contribution != null) { + contributions.put(name, contribution); + } } } if (contributions.isEmpty()) { diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/HealthEndpointSupportTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/HealthEndpointSupportTests.java index 60e1421b382..2f65c871db2 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/HealthEndpointSupportTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/HealthEndpointSupportTests.java @@ -207,6 +207,14 @@ abstract class HealthEndpointSupportTests, C, T assertThat(getHealth(result)).isNotInstanceOf(SystemHealth.class); } + @Test + void getHealthWithEmptyCompositeReturnsNullResult() { // gh-18687 + this.registry.registerContributor("test", createCompositeContributor(Collections.emptyMap())); + HealthResult result = create(this.registry, this.groups).getHealth(ApiVersion.V3, SecurityContext.NONE, + false); + assertThat(result).isNull(); + } + protected abstract HealthEndpointSupport create(R registry, HealthEndpointGroups groups); protected abstract R createRegistry();