From 1bdbc7bdef75709bec7abc3972db23c8211b17d1 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Tue, 4 Sep 2018 16:42:46 +0200 Subject: [PATCH] Optimize for Flux to/from Mono conversions This commit optimizes Flux <-> Mono conversions in our codebase by avoiding to hide that conversion from Reactor. This tries to keep conversions sequentially so that they can be detected by Reactor and optimized. In Spring WebFlux, this means keeping the conversions at the edges of a method implementation (right when getting an input parameter, and before returning it as a result). If those conversions are made between other operators, Reactor might not be able to detect those conversions and optimize them. Issue: SPR-17203 --- .../http/codec/json/AbstractJackson2Encoder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java index 42ed13ae1f..6bf4f7bf38 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java @@ -116,8 +116,8 @@ public abstract class AbstractJackson2Encoder extends Jackson2CodecSupport imple JsonEncoding encoding = getJsonEncoding(mimeType); if (inputStream instanceof Mono) { - return Flux.from(inputStream).map(value -> - encodeValue(value, mimeType, bufferFactory, elementType, hints, encoding)); + return Mono.from(inputStream).map(value -> + encodeValue(value, mimeType, bufferFactory, elementType, hints, encoding)).flux(); } for (MediaType streamingMediaType : this.streamingMediaTypes) {