Browse Source

Revert Support pluggable types for EndpointJsonMapper

Closes gh-46534
pull/47478/head
Phillip Webb 2 months ago
parent
commit
e01b36216a
  1. 25
      module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfiguration.java
  2. 16
      module/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jackson/EndpointJsonMapper.java
  3. 14
      module/spring-boot-webflux/src/main/java/org/springframework/boot/webflux/autoconfigure/actuate/web/WebFluxEndpointManagementContextConfiguration.java
  4. 12
      module/spring-boot-webmvc/src/main/java/org/springframework/boot/webmvc/autoconfigure/actuate/web/WebMvcEndpointManagementContextConfiguration.java

25
module/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfiguration.java

@ -16,9 +16,6 @@
package org.springframework.boot.actuate.autoconfigure.endpoint.jackson; package org.springframework.boot.actuate.autoconfigure.endpoint.jackson;
import java.util.HashSet;
import java.util.Set;
import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonInclude.Include;
import tools.jackson.databind.ObjectMapper; import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.json.JsonMapper; import tools.jackson.databind.json.JsonMapper;
@ -29,7 +26,6 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBooleanProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnBooleanProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.util.ClassUtils;
/** /**
* {@link EnableAutoConfiguration Auto-configuration} for Endpoint Jackson support. * {@link EnableAutoConfiguration Auto-configuration} for Endpoint Jackson support.
@ -40,8 +36,6 @@ import org.springframework.util.ClassUtils;
@AutoConfiguration @AutoConfiguration
public final class JacksonEndpointAutoConfiguration { public final class JacksonEndpointAutoConfiguration {
private static final String CONTRIBUTED_HEALTH = "org.springframework.boot.health.contributor.ContributedHealth";
@Bean @Bean
@ConditionalOnBooleanProperty(name = "management.endpoints.jackson.isolated-object-mapper", matchIfMissing = true) @ConditionalOnBooleanProperty(name = "management.endpoints.jackson.isolated-object-mapper", matchIfMissing = true)
@ConditionalOnClass(ObjectMapper.class) @ConditionalOnClass(ObjectMapper.class)
@ -50,24 +44,7 @@ public final class JacksonEndpointAutoConfiguration {
.changeDefaultPropertyInclusion( .changeDefaultPropertyInclusion(
(value) -> value.withValueInclusion(Include.NON_NULL).withContentInclusion(Include.NON_NULL)) (value) -> value.withValueInclusion(Include.NON_NULL).withContentInclusion(Include.NON_NULL))
.build(); .build();
Set<Class<?>> supportedTypes = new HashSet<>(EndpointJsonMapper.DEFAULT_SUPPORTED_TYPES); return () -> jsonMapper;
if (ClassUtils.isPresent(CONTRIBUTED_HEALTH, null)) {
supportedTypes.add(ClassUtils.resolveClassName(CONTRIBUTED_HEALTH, null));
}
return new EndpointJsonMapper() {
@Override
public JsonMapper get() {
return jsonMapper;
}
@Override
public Set<Class<?>> getSupportedTypes() {
return supportedTypes;
}
};
} }
} }

16
module/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jackson/EndpointJsonMapper.java

@ -16,8 +16,6 @@
package org.springframework.boot.actuate.endpoint.jackson; package org.springframework.boot.actuate.endpoint.jackson;
import java.util.Set;
import tools.jackson.databind.json.JsonMapper; import tools.jackson.databind.json.JsonMapper;
import org.springframework.boot.actuate.endpoint.OperationResponseBody; import org.springframework.boot.actuate.endpoint.OperationResponseBody;
@ -30,13 +28,9 @@ import org.springframework.boot.actuate.endpoint.OperationResponseBody;
* @since 4.0.0 * @since 4.0.0
* @see OperationResponseBody * @see OperationResponseBody
*/ */
@FunctionalInterface
public interface EndpointJsonMapper { public interface EndpointJsonMapper {
/**
* The default supported types.
*/
Set<Class<?>> DEFAULT_SUPPORTED_TYPES = Set.of(OperationResponseBody.class);
/** /**
* Return the {@link JsonMapper} that should be used to serialize * Return the {@link JsonMapper} that should be used to serialize
* {@link OperationResponseBody} endpoint results. * {@link OperationResponseBody} endpoint results.
@ -44,12 +38,4 @@ public interface EndpointJsonMapper {
*/ */
JsonMapper get(); JsonMapper get();
/**
* Return the types that this endpoint mapper supports.
* @return the supported types
*/
default Set<Class<?>> getSupportedTypes() {
return DEFAULT_SUPPORTED_TYPES;
}
} }

14
module/spring-boot-webflux/src/main/java/org/springframework/boot/webflux/autoconfigure/actuate/web/WebFluxEndpointManagementContextConfiguration.java

@ -21,7 +21,6 @@ import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.Supplier; import java.util.function.Supplier;
import tools.jackson.databind.json.JsonMapper; import tools.jackson.databind.json.JsonMapper;
@ -68,7 +67,6 @@ import org.springframework.http.codec.HttpMessageWriter;
import org.springframework.http.codec.ServerCodecConfigurer; import org.springframework.http.codec.ServerCodecConfigurer;
import org.springframework.http.codec.json.JacksonJsonEncoder; import org.springframework.http.codec.json.JacksonJsonEncoder;
import org.springframework.http.server.reactive.HttpHandler; import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.util.MimeType;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.util.function.SingletonSupplier; import org.springframework.util.function.SingletonSupplier;
import org.springframework.web.reactive.DispatcherHandler; import org.springframework.web.reactive.DispatcherHandler;
@ -184,17 +182,13 @@ public class WebFluxEndpointManagementContextConfiguration {
private void process(Encoder<?> encoder) { private void process(Encoder<?> encoder) {
if (encoder instanceof JacksonJsonEncoder jacksonJsonEncoder) { if (encoder instanceof JacksonJsonEncoder jacksonJsonEncoder) {
this.endpointJsonMapper.get() jacksonJsonEncoder.registerMappersForType(OperationResponseBody.class, (associations) -> {
.getSupportedTypes() JsonMapper jsonMapper = this.endpointJsonMapper.get().get();
.forEach((type) -> jacksonJsonEncoder.registerMappersForType(type, this::registerForAllMimeTypes)); MEDIA_TYPES.forEach((mimeType) -> associations.put(mimeType, jsonMapper));
});
} }
} }
private void registerForAllMimeTypes(Map<MimeType, JsonMapper> registrar) {
JsonMapper jsonMapper = this.endpointJsonMapper.get().get();
MEDIA_TYPES.forEach((mimeType) -> registrar.put(mimeType, jsonMapper));
}
} }
} }

12
module/spring-boot-webmvc/src/main/java/org/springframework/boot/webmvc/autoconfigure/actuate/web/WebMvcEndpointManagementContextConfiguration.java

@ -21,7 +21,6 @@ import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import tools.jackson.databind.json.JsonMapper; import tools.jackson.databind.json.JsonMapper;
@ -183,13 +182,10 @@ public class WebMvcEndpointManagementContextConfiguration {
} }
private void configure(JacksonJsonHttpMessageConverter converter) { private void configure(JacksonJsonHttpMessageConverter converter) {
this.endpointJsonMapper.getSupportedTypes() converter.registerMappersForType(OperationResponseBody.class, (associations) -> {
.forEach((type) -> converter.registerMappersForType(type, this::registerForAllMimeTypes)); JsonMapper jsonMapper = this.endpointJsonMapper.get();
} MEDIA_TYPES.forEach((mimeType) -> associations.put(mimeType, jsonMapper));
});
private void registerForAllMimeTypes(Map<MediaType, JsonMapper> registrar) {
JsonMapper jsonMapper = this.endpointJsonMapper.get();
MEDIA_TYPES.forEach((mimeType) -> registrar.put(mimeType, jsonMapper));
} }
} }

Loading…
Cancel
Save