diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/EndpointDiscoverer.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/EndpointDiscoverer.java index 01259e98f58..bbdf544f668 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/EndpointDiscoverer.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/EndpointDiscoverer.java @@ -424,7 +424,7 @@ public abstract class EndpointDiscoverer, O exten } private Class getFilter(Class type) { - return MergedAnnotations.from(type).get(FilteredEndpoint.class) + return MergedAnnotations.from(type, SearchStrategy.TYPE_HIERARCHY).get(FilteredEndpoint.class) .getValue(MergedAnnotation.VALUE, Class.class).orElse(null); } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/annotation/EndpointDiscovererTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/annotation/EndpointDiscovererTests.java index 11c08155ea6..538b002c4c9 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/annotation/EndpointDiscovererTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/annotation/EndpointDiscovererTests.java @@ -209,7 +209,8 @@ class EndpointDiscovererTests { load(SpecializedEndpointsConfiguration.class, (context) -> { SpecializedEndpointDiscoverer discoverer = new SpecializedEndpointDiscoverer(context); Map endpoints = mapEndpoints(discoverer.getEndpoints()); - assertThat(endpoints).containsOnlyKeys(EndpointId.of("test"), EndpointId.of("specialized")); + assertThat(endpoints).containsOnlyKeys(EndpointId.of("test"), EndpointId.of("specialized"), + EndpointId.of("specialized-superclass")); }); } @@ -252,7 +253,7 @@ class EndpointDiscovererTests { load(SpecializedEndpointsConfiguration.class, (context) -> { EndpointFilter filter = (endpoint) -> { EndpointId id = endpoint.getEndpointId(); - return !id.equals(EndpointId.of("specialized")); + return !id.equals(EndpointId.of("specialized")) && !id.equals(EndpointId.of("specialized-superclass")); }; SpecializedEndpointDiscoverer discoverer = new SpecializedEndpointDiscoverer(context, Collections.singleton(filter)); @@ -401,7 +402,8 @@ class EndpointDiscovererTests { } - @Import({ TestEndpoint.class, SpecializedTestEndpoint.class, SpecializedExtension.class }) + @Import({ TestEndpoint.class, SpecializedTestEndpoint.class, SpecializedSuperclassTestEndpoint.class, + SpecializedExtension.class }) static class SpecializedEndpointsConfiguration { } @@ -494,6 +496,20 @@ class EndpointDiscovererTests { } + @SpecializedEndpoint(id = "specialized-superclass") + static class AbstractFilteredEndpoint { + + } + + static class SpecializedSuperclassTestEndpoint extends AbstractFilteredEndpoint { + + @ReadOperation + public Object getAll() { + return null; + } + + } + static class SubSpecializedTestEndpoint extends SpecializedTestEndpoint { @ReadOperation