diff --git a/src/main/java/org/springframework/hateoas/config/WebClientConfigurer.java b/src/main/java/org/springframework/hateoas/config/WebClientConfigurer.java index 47c783f6..fe4462e4 100644 --- a/src/main/java/org/springframework/hateoas/config/WebClientConfigurer.java +++ b/src/main/java/org/springframework/hateoas/config/WebClientConfigurer.java @@ -25,6 +25,7 @@ import org.springframework.core.codec.Encoder; import org.springframework.hateoas.config.EnableHypermediaSupport.HypermediaType; import org.springframework.http.codec.ClientCodecConfigurer; import org.springframework.http.codec.CodecConfigurer.CustomCodecs; +import org.springframework.http.codec.json.AbstractJackson2Decoder; import org.springframework.http.codec.json.Jackson2JsonDecoder; import org.springframework.http.codec.json.Jackson2JsonEncoder; import org.springframework.util.Assert; @@ -59,7 +60,7 @@ public class WebClientConfigurer { Assert.notNull(hypermediaTypes, "HypermediaMappingInformations must not be null!"); List> encoders = new ArrayList<>(); - List> decoders = new ArrayList<>(); + List decoders = new ArrayList<>(); hypermediaTypes.forEach(hypermedia -> { @@ -75,7 +76,9 @@ public class WebClientConfigurer { CustomCodecs codecs = it.customCodecs(); encoders.forEach(codecs::encoder); - decoders.forEach(codecs::decoder); + decoders.stream() // + .peek(applyDefaultConfiguration(codecs)) // + .forEach(codecs::decoder); }; } @@ -103,4 +106,23 @@ public class WebClientConfigurer { .exchangeStrategies(it -> it.codecs(configurer)) // .build(); } + + /** + * Returns a {@link Consumer} of {@link AbstractJackson2Decoder} that will copy the default configuration of the given + * {@link CustomCodecs} to a decoder. + * + * @param codecs must not be {@literal null}. + * @return + */ + private static Consumer applyDefaultConfiguration(CustomCodecs codecs) { + + return decoder -> codecs.withDefaultCodecConfig(config -> { + + Integer maxInMemorySize = config.maxInMemorySize(); + + if (maxInMemorySize != null) { + decoder.setMaxInMemorySize(maxInMemorySize); + } + }); + } }