Allow for decode method to return null in AbstractJackson2Decoder

Prior to this commit, the decoder did not allow for a null value
returned from the Jackson object reader.

Closes: gh-23935
This commit is contained in:
Arjen Poutsma
2019-11-07 16:10:53 +01:00
parent 789f6fc188
commit a7a88371e7
2 changed files with 20 additions and 1 deletions

View File

@@ -130,7 +130,7 @@ public abstract class AbstractJackson2Decoder extends Jackson2CodecSupport imple
@Nullable MimeType mimeType, @Nullable Map<String, Object> hints) {
return DataBufferUtils.join(input, this.maxInMemorySize)
.map(dataBuffer -> decode(dataBuffer, elementType, mimeType, hints));
.flatMap(dataBuffer -> Mono.justOrEmpty(decode(dataBuffer, elementType, mimeType, hints)));
}
@Override

View File

@@ -29,6 +29,7 @@ import java.nio.file.Files;
import java.time.Duration;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Stream;
@@ -1080,6 +1081,24 @@ class WebClientIntegrationTests {
.verify(Duration.ofSeconds(5));
}
@ParameterizedWebClientTest
void nullJsonResponseShouldBeReadAsEmpty(ClientHttpConnector connector) {
startServer(connector);
prepareResponse(response -> response
.setResponseCode(200)
.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.setBody("null"));
Mono<Map> result = this.webClient.get()
.uri("/null")
.retrieve()
.bodyToMono(Map.class);
StepVerifier.create(result)
.verifyComplete();
}
private void prepareResponse(Consumer<MockResponse> consumer) {
MockResponse response = new MockResponse();