diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonDecoder.java index 41034272713..a941b3efdc0 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonDecoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonDecoder.java @@ -87,7 +87,7 @@ public class Jackson2JsonDecoder extends AbstractJackson2Codec implements Decode MimeType mimeType, Object... hints) { JsonObjectDecoder objectDecoder = this.monoObjectDecoder; - return decodeInternal(objectDecoder, inputStream, elementType, mimeType, hints).single(); + return decodeInternal(objectDecoder, inputStream, elementType, mimeType, hints).singleOrEmpty(); } private Flux decodeInternal(JsonObjectDecoder objectDecoder, Publisher inputStream, diff --git a/spring-web/src/test/java/org/springframework/http/codec/json/Jackson2JsonDecoderTests.java b/spring-web/src/test/java/org/springframework/http/codec/json/Jackson2JsonDecoderTests.java index b68c512ef03..15729456d72 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/json/Jackson2JsonDecoderTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/json/Jackson2JsonDecoderTests.java @@ -105,6 +105,18 @@ public class Jackson2JsonDecoderTests extends AbstractDataBufferAllocatingTestCa }); } + @Test + public void decodeEmptyBodyToMono() throws Exception { + Flux source = Flux.empty(); + ResolvableType elementType = ResolvableType.forClass(Pojo.class); + Mono flux = new Jackson2JsonDecoder().decodeToMono(source, elementType, null); + + TestSubscriber.subscribe(flux) + .assertNoError() + .assertComplete() + .assertValueCount(0); + } + void handle(List list) { }