Skip to content

Commit 3d2071d

Browse files
committed
Migrate endpoints to return OperationResponseBody types
Update types returned from endpoints to implement the `OperationResponseBody` interface. This ensures that they will be serialized using the isolated actuator `ObjectMapper`. See gh-20291
1 parent 1f8493f commit 3d2071d

File tree

25 files changed

+74
-46
lines changed

25 files changed

+74
-46
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/condition/ConditionsReportEndpoint.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.fasterxml.jackson.annotation.JsonInclude.Include;
2828
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
2929

30+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
3031
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
3132
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
3233
import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport;
@@ -81,7 +82,7 @@ private ConfigurableApplicationContext getConfigurableParent(ConfigurableApplica
8182
/**
8283
* A description of an application's condition evaluation.
8384
*/
84-
public static final class ConditionsDescriptor {
85+
public static final class ConditionsDescriptor implements OperationResponseBody {
8586

8687
private final Map<String, ContextConditionsDescriptor> contexts;
8788

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/audit/AuditEventsEndpoint.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.time.OffsetDateTime;
2121
import java.util.List;
2222

23+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
2324
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
2425
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
2526
import org.springframework.lang.Nullable;
@@ -55,7 +56,7 @@ private Instant getInstant(OffsetDateTime offsetDateTime) {
5556
/**
5657
* Description of an application's {@link AuditEvent audit events}.
5758
*/
58-
public static final class AuditEventsDescriptor {
59+
public static final class AuditEventsDescriptor implements OperationResponseBody {
5960

6061
private final List<AuditEvent> events;
6162

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/beans/BeansEndpoint.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.springframework.beans.factory.config.BeanDefinition;
2323
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
2424
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
25+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
2526
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
2627
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
2728
import org.springframework.context.ApplicationContext;
@@ -73,7 +74,7 @@ private static ConfigurableApplicationContext getConfigurableParent(Configurable
7374
/**
7475
* Description of an application's beans.
7576
*/
76-
public static final class BeansDescriptor {
77+
public static final class BeansDescriptor implements OperationResponseBody {
7778

7879
private final Map<String, ContextBeansDescriptor> contexts;
7980

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/cache/CachesEndpoint.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Objects;
2323
import java.util.function.Predicate;
2424

25+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
2526
import org.springframework.boot.actuate.endpoint.annotation.DeleteOperation;
2627
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
2728
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
@@ -148,7 +149,7 @@ private Predicate<String> matchAll() {
148149
/**
149150
* Description of the caches.
150151
*/
151-
public static final class CachesDescriptor {
152+
public static final class CachesDescriptor implements OperationResponseBody {
152153

153154
private final Map<String, CacheManagerDescriptor> cacheManagers;
154155

@@ -182,7 +183,7 @@ public Map<String, CacheDescriptor> getCaches() {
182183
/**
183184
* Description of a {@link Cache}.
184185
*/
185-
public static class CacheDescriptor {
186+
public static class CacheDescriptor implements OperationResponseBody {
186187

187188
private final String target;
188189

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/ShutdownEndpoint.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.boot.actuate.context;
1818

1919
import org.springframework.beans.BeansException;
20+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
2021
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
2122
import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
2223
import org.springframework.context.ApplicationContext;
@@ -71,7 +72,7 @@ public void setApplicationContext(ApplicationContext context) throws BeansExcept
7172
/**
7273
* Description of the shutdown.
7374
*/
74-
public static class ShutdownDescriptor {
75+
public static class ShutdownDescriptor implements OperationResponseBody {
7576

7677
private static final ShutdownDescriptor DEFAULT = new ShutdownDescriptor("Shutting down, bye...");
7778

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/context/properties/ConfigurationPropertiesReportEndpoint.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import org.apache.commons.logging.LogFactory;
5555

5656
import org.springframework.beans.BeansException;
57+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
5758
import org.springframework.boot.actuate.endpoint.SanitizableData;
5859
import org.springframework.boot.actuate.endpoint.Sanitizer;
5960
import org.springframework.boot.actuate.endpoint.SanitizingFunction;
@@ -564,7 +565,7 @@ private String determineAccessorSuffix(String propertyName) {
564565
* Description of an application's
565566
* {@link ConfigurationProperties @ConfigurationProperties} beans.
566567
*/
567-
public static final class ConfigurationPropertiesDescriptor {
568+
public static final class ConfigurationPropertiesDescriptor implements OperationResponseBody {
568569

569570
private final Map<String, ContextConfigurationPropertiesDescriptor> contexts;
570571

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/jersey/JerseyEndpointResourceFactory.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.springframework.boot.actuate.endpoint.InvalidEndpointRequestException;
4444
import org.springframework.boot.actuate.endpoint.InvocationContext;
4545
import org.springframework.boot.actuate.endpoint.OperationArgumentResolver;
46+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
4647
import org.springframework.boot.actuate.endpoint.ProducibleOperationArgumentResolver;
4748
import org.springframework.boot.actuate.endpoint.SecurityContext;
4849
import org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver;
@@ -323,7 +324,8 @@ private EndpointLinksInflector(EndpointLinksResolver linksResolver) {
323324
public Response apply(ContainerRequestContext request) {
324325
Map<String, Link> links = this.linksResolver
325326
.resolveLinks(request.getUriInfo().getAbsolutePath().toString());
326-
return Response.ok(Collections.singletonMap("_links", links)).build();
327+
Map<String, Map<String, Link>> entity = OperationResponseBody.of(Collections.singletonMap("_links", links));
328+
return Response.ok(entity).build();
327329
}
328330

329331
}

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/reactive/WebFluxEndpointHandlerMapping.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.aot.hint.annotation.Reflective;
2727
import org.springframework.aot.hint.annotation.ReflectiveRuntimeHintsRegistrar;
2828
import org.springframework.beans.factory.InitializingBean;
29+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
2930
import org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver;
3031
import org.springframework.boot.actuate.endpoint.web.EndpointMapping;
3132
import org.springframework.boot.actuate.endpoint.web.EndpointMediaTypes;
@@ -87,8 +88,8 @@ class WebFluxLinksHandler implements LinksHandler {
8788
public Map<String, Map<String, Link>> links(ServerWebExchange exchange) {
8889
String requestUri = UriComponentsBuilder.fromUri(exchange.getRequest().getURI()).replaceQuery(null)
8990
.toUriString();
90-
return Collections.singletonMap("_links",
91-
WebFluxEndpointHandlerMapping.this.linksResolver.resolveLinks(requestUri));
91+
Map<String, Link> links = WebFluxEndpointHandlerMapping.this.linksResolver.resolveLinks(requestUri);
92+
return OperationResponseBody.of(Collections.singletonMap("_links", links));
9293
}
9394

9495
@Override

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/web/servlet/WebMvcEndpointHandlerMapping.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.aot.hint.RuntimeHintsRegistrar;
2929
import org.springframework.aot.hint.annotation.Reflective;
3030
import org.springframework.aot.hint.annotation.ReflectiveRuntimeHintsRegistrar;
31+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
3132
import org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver;
3233
import org.springframework.boot.actuate.endpoint.web.EndpointMapping;
3334
import org.springframework.boot.actuate.endpoint.web.EndpointMediaTypes;
@@ -84,8 +85,9 @@ class WebMvcLinksHandler implements LinksHandler {
8485
@ResponseBody
8586
@Reflective
8687
public Map<String, Map<String, Link>> links(HttpServletRequest request, HttpServletResponse response) {
87-
return Collections.singletonMap("_links",
88-
WebMvcEndpointHandlerMapping.this.linksResolver.resolveLinks(request.getRequestURL().toString()));
88+
Map<String, Link> links = WebMvcEndpointHandlerMapping.this.linksResolver
89+
.resolveLinks(request.getRequestURL().toString());
90+
return OperationResponseBody.of(Collections.singletonMap("_links", links));
8991
}
9092

9193
@Override

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/env/EnvironmentEndpoint.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import com.fasterxml.jackson.annotation.JsonInclude;
2929

30+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
3031
import org.springframework.boot.actuate.endpoint.SanitizableData;
3132
import org.springframework.boot.actuate.endpoint.Sanitizer;
3233
import org.springframework.boot.actuate.endpoint.SanitizingFunction;
@@ -203,7 +204,7 @@ protected Object stringifyIfNecessary(Object value) {
203204
/**
204205
* Description of an {@link Environment}.
205206
*/
206-
public static final class EnvironmentDescriptor {
207+
public static final class EnvironmentDescriptor implements OperationResponseBody {
207208

208209
private final List<String> activeProfiles;
209210

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/flyway/FlywayEndpoint.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.flywaydb.core.api.MigrationInfo;
2929
import org.flywaydb.core.api.MigrationState;
3030

31+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
3132
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
3233
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
3334
import org.springframework.context.ApplicationContext;
@@ -69,7 +70,7 @@ public FlywayBeansDescriptor flywayBeans() {
6970
/**
7071
* Description of an application's {@link Flyway} beans.
7172
*/
72-
public static final class FlywayBeansDescriptor {
73+
public static final class FlywayBeansDescriptor implements OperationResponseBody {
7374

7475
private final Map<String, ContextFlywayBeansDescriptor> contexts;
7576

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/HealthComponent.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2021 the original author or authors.
2+
* Copyright 2012-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -18,6 +18,8 @@
1818

1919
import com.fasterxml.jackson.annotation.JsonUnwrapped;
2020

21+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
22+
2123
/**
2224
* A component that contributes data to results returned from the {@link HealthEndpoint}.
2325
*
@@ -26,7 +28,7 @@
2628
* @see Health
2729
* @see CompositeHealth
2830
*/
29-
public abstract class HealthComponent {
31+
public abstract class HealthComponent implements OperationResponseBody {
3032

3133
HealthComponent() {
3234
}

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/info/InfoEndpoint.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.List;
2020
import java.util.Map;
2121

22+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
2223
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
2324
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
2425
import org.springframework.util.Assert;
@@ -51,7 +52,7 @@ public Map<String, Object> info() {
5152
for (InfoContributor contributor : this.infoContributors) {
5253
contributor.contribute(builder);
5354
}
54-
return builder.build().getDetails();
55+
return OperationResponseBody.of(builder.build().getDetails());
5556
}
5657

5758
}

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/integration/IntegrationGraphEndpoint.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.springframework.aot.hint.BindingReflectionHintsRegistrar;
2323
import org.springframework.aot.hint.RuntimeHints;
2424
import org.springframework.aot.hint.RuntimeHintsRegistrar;
25+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
2526
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
2627
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
2728
import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
@@ -99,7 +100,7 @@ public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
99100
/**
100101
* Description of a {@link Graph}.
101102
*/
102-
public static class GraphDescriptor {
103+
public static class GraphDescriptor implements OperationResponseBody {
103104

104105
private final Map<String, Object> contentDescriptor;
105106

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import liquibase.database.jvm.JdbcConnection;
3333
import liquibase.integration.spring.SpringLiquibase;
3434

35+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
3536
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
3637
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
3738
import org.springframework.context.ApplicationContext;
@@ -106,7 +107,7 @@ private LiquibaseBeanDescriptor createReport(SpringLiquibase liquibase, Database
106107
/**
107108
* Description of an application's {@link SpringLiquibase} beans.
108109
*/
109-
public static final class LiquibaseBeansDescriptor {
110+
public static final class LiquibaseBeansDescriptor implements OperationResponseBody {
110111

111112
private final Map<String, ContextLiquibaseBeansDescriptor> contexts;
112113

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/logging/LoggersEndpoint.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.TreeSet;
2626

2727
import org.springframework.aot.hint.annotation.RegisterReflectionForBinding;
28+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
2829
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
2930
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
3031
import org.springframework.boot.actuate.endpoint.annotation.Selector;
@@ -121,7 +122,7 @@ private Map<String, LoggerLevelsDescriptor> getLoggers(Collection<LoggerConfigur
121122
/**
122123
* Description of loggers.
123124
*/
124-
public static class LoggersDescriptor {
125+
public static class LoggersDescriptor implements OperationResponseBody {
125126

126127
/**
127128
* Empty description.
@@ -158,7 +159,7 @@ public Map<String, GroupLoggerLevelsDescriptor> getGroups() {
158159
/**
159160
* Description of levels configured for a given logger.
160161
*/
161-
public static class LoggerLevelsDescriptor {
162+
public static class LoggerLevelsDescriptor implements OperationResponseBody {
162163

163164
private String configuredLevel;
164165

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/management/ThreadDumpEndpoint.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.List;
2323
import java.util.function.Function;
2424

25+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
2526
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
2627
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
2728

@@ -54,7 +55,7 @@ private <T> T getFormattedThreadDump(Function<ThreadInfo[], T> formatter) {
5455
/**
5556
* Description of a thread dump.
5657
*/
57-
public static final class ThreadDumpDescriptor {
58+
public static final class ThreadDumpDescriptor implements OperationResponseBody {
5859

5960
private final List<ThreadInfo> threads;
6061

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/MetricsEndpoint.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
3535

3636
import org.springframework.boot.actuate.endpoint.InvalidEndpointRequestException;
37+
import org.springframework.boot.actuate.endpoint.OperationResponseBody;
3738
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
3839
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
3940
import org.springframework.boot.actuate.endpoint.annotation.Selector;
@@ -159,7 +160,7 @@ private <K, V, T> List<T> asList(Map<K, V> map, BiFunction<K, V, T> mapper) {
159160
/**
160161
* Description of metric names.
161162
*/
162-
public static final class MetricNamesDescriptor {
163+
public static final class MetricNamesDescriptor implements OperationResponseBody {
163164

164165
private final Set<String> names;
165166

@@ -176,7 +177,7 @@ public Set<String> getNames() {
176177
/**
177178
* Description of a metric.
178179
*/
179-
public static final class MetricDescriptor {
180+
public static final class MetricDescriptor implements OperationResponseBody {
180181

181182
private final String name;
182183

0 commit comments

Comments
 (0)