From 54bfbbc6078f1ae9d56dd7c2371e8161e797d498 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Wed, 6 Jul 2016 12:38:05 -0400 Subject: [PATCH] Rename decodeOne->decodeToMono and readOne->readMono --- .../core/codec/AbstractDecoder.java | 2 +- .../springframework/core/codec/Decoder.java | 2 +- .../core/codec/StringDecoder.java | 2 +- .../http/codec/json/JacksonJsonDecoder.java | 2 +- .../reactive/CodecHttpMessageConverter.java | 4 +- .../reactive/HttpMessageConverter.java | 2 +- .../RequestBodyArgumentResolver.java | 10 ++-- .../core/codec/StringDecoderTests.java | 60 +++++++------------ .../codec/json/JacksonJsonDecoderTests.java | 2 +- 9 files changed, 35 insertions(+), 51 deletions(-) diff --git a/spring-web-reactive/src/main/java/org/springframework/core/codec/AbstractDecoder.java b/spring-web-reactive/src/main/java/org/springframework/core/codec/AbstractDecoder.java index 1b7af181f05..7f8fc803a47 100644 --- a/spring-web-reactive/src/main/java/org/springframework/core/codec/AbstractDecoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/core/codec/AbstractDecoder.java @@ -55,7 +55,7 @@ public abstract class AbstractDecoder implements Decoder { } @Override - public Mono decodeOne(Publisher inputStream, ResolvableType elementType, MimeType mimeType, Object... hints) { + public Mono decodeToMono(Publisher inputStream, ResolvableType elementType, MimeType mimeType, Object... hints) { throw new UnsupportedOperationException(); } } diff --git a/spring-web-reactive/src/main/java/org/springframework/core/codec/Decoder.java b/spring-web-reactive/src/main/java/org/springframework/core/codec/Decoder.java index bd5e611d9af..1b029b4c79b 100644 --- a/spring-web-reactive/src/main/java/org/springframework/core/codec/Decoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/core/codec/Decoder.java @@ -72,7 +72,7 @@ public interface Decoder { * @param hints additional information about how to do decode, optional * @return the output stream with the decoded element */ - Mono decodeOne(Publisher inputStream, ResolvableType elementType, + Mono decodeToMono(Publisher inputStream, ResolvableType elementType, MimeType mimeType, Object... hints); /** diff --git a/spring-web-reactive/src/main/java/org/springframework/core/codec/StringDecoder.java b/spring-web-reactive/src/main/java/org/springframework/core/codec/StringDecoder.java index 3c293029bd6..51dc6a5eb5f 100644 --- a/spring-web-reactive/src/main/java/org/springframework/core/codec/StringDecoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/core/codec/StringDecoder.java @@ -95,7 +95,7 @@ public class StringDecoder extends AbstractDecoder { } @Override - public Mono decodeOne(Publisher inputStream, ResolvableType elementType, + public Mono decodeToMono(Publisher inputStream, ResolvableType elementType, MimeType mimeType, Object... hints) { return decodeInternal(Flux.from(inputStream), mimeType). diff --git a/spring-web-reactive/src/main/java/org/springframework/http/codec/json/JacksonJsonDecoder.java b/spring-web-reactive/src/main/java/org/springframework/http/codec/json/JacksonJsonDecoder.java index 36b84d338b6..037e46299ee 100644 --- a/spring-web-reactive/src/main/java/org/springframework/http/codec/json/JacksonJsonDecoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/http/codec/json/JacksonJsonDecoder.java @@ -78,7 +78,7 @@ public class JacksonJsonDecoder extends AbstractDecoder { } @Override - public Mono decodeOne(Publisher inputStream, ResolvableType elementType, + public Mono decodeToMono(Publisher inputStream, ResolvableType elementType, MimeType mimeType, Object... hints) { JsonObjectDecoder objectDecoder = this.monoObjectDecoder; diff --git a/spring-web-reactive/src/main/java/org/springframework/http/converter/reactive/CodecHttpMessageConverter.java b/spring-web-reactive/src/main/java/org/springframework/http/converter/reactive/CodecHttpMessageConverter.java index 60e4b3e3ea3..b88156eaece 100644 --- a/spring-web-reactive/src/main/java/org/springframework/http/converter/reactive/CodecHttpMessageConverter.java +++ b/spring-web-reactive/src/main/java/org/springframework/http/converter/reactive/CodecHttpMessageConverter.java @@ -123,12 +123,12 @@ public class CodecHttpMessageConverter implements HttpMessageConverter { } @Override - public Mono readOne(ResolvableType type, ReactiveHttpInputMessage inputMessage) { + public Mono readMono(ResolvableType type, ReactiveHttpInputMessage inputMessage) { if (this.decoder == null) { return Mono.error(new IllegalStateException("No decoder set")); } MediaType contentType = getContentType(inputMessage); - return this.decoder.decodeOne(inputMessage.getBody(), type, contentType); + return this.decoder.decodeToMono(inputMessage.getBody(), type, contentType); } private MediaType getContentType(ReactiveHttpInputMessage inputMessage) { diff --git a/spring-web-reactive/src/main/java/org/springframework/http/converter/reactive/HttpMessageConverter.java b/spring-web-reactive/src/main/java/org/springframework/http/converter/reactive/HttpMessageConverter.java index 0f663457fa6..d79009faef4 100644 --- a/spring-web-reactive/src/main/java/org/springframework/http/converter/reactive/HttpMessageConverter.java +++ b/spring-web-reactive/src/main/java/org/springframework/http/converter/reactive/HttpMessageConverter.java @@ -69,7 +69,7 @@ public interface HttpMessageConverter { * @param inputMessage the HTTP input message to read from * @return the converted {@link Mono} of object */ - Mono readOne(ResolvableType type, ReactiveHttpInputMessage inputMessage); + Mono readMono(ResolvableType type, ReactiveHttpInputMessage inputMessage); /** * Indicates whether the given class can be written by this converter. diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolver.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolver.java index 52ece42bbc1..9113e3f24ed 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolver.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestBodyArgumentResolver.java @@ -151,14 +151,16 @@ public class RequestBodyArgumentResolver implements HandlerMethodArgumentResolve return Mono.just(getConversionService().convert(flux, FLUX_TYPE, typeDescriptor)); } else { - Mono mono = converter.readOne(elementType, request); + Mono mono = converter.readMono(elementType, request); if (this.validator != null) { mono = mono.map(applyValidationIfApplicable(parameter)); } - if (!convertFromMono) { - return mono.map(value-> value); // TODO: MonoToObjectConverter + if (convertFromMono) { + return Mono.just(getConversionService().convert(mono, MONO_TYPE, typeDescriptor)); + } + else { + return Mono.from(mono); } - return Mono.just(getConversionService().convert(mono, MONO_TYPE, typeDescriptor)); } } } diff --git a/spring-web-reactive/src/test/java/org/springframework/core/codec/StringDecoderTests.java b/spring-web-reactive/src/test/java/org/springframework/core/codec/StringDecoderTests.java index c6624efdeb5..f3d4bb43b0b 100644 --- a/spring-web-reactive/src/test/java/org/springframework/core/codec/StringDecoderTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/core/codec/StringDecoderTests.java @@ -16,7 +16,6 @@ package org.springframework.core.codec; -import org.junit.Before; import org.junit.Test; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -37,37 +36,25 @@ import static org.junit.Assert.assertTrue; */ public class StringDecoderTests extends AbstractDataBufferAllocatingTestCase { - private StringDecoder decoder; - - @Before - public void createEncoder() { - this.decoder = new StringDecoder(); - } + private StringDecoder decoder = new StringDecoder(); @Test public void canDecode() { - assertTrue(this.decoder - .canDecode(ResolvableType.forClass(String.class), MediaType.TEXT_PLAIN)); - assertTrue(this.decoder - .canDecode(ResolvableType.forClass(String.class), MediaType.TEXT_HTML)); - assertTrue(this.decoder.canDecode(ResolvableType.forClass(String.class), - MediaType.APPLICATION_JSON)); - assertFalse(this.decoder - .canDecode(ResolvableType.forClass(Integer.class), MediaType.TEXT_PLAIN)); - assertFalse(this.decoder.canDecode(ResolvableType.forClass(Object.class), - MediaType.APPLICATION_JSON)); + assertTrue(this.decoder.canDecode(ResolvableType.forClass(String.class), MediaType.TEXT_PLAIN)); + assertTrue(this.decoder.canDecode(ResolvableType.forClass(String.class), MediaType.TEXT_HTML)); + assertTrue(this.decoder.canDecode(ResolvableType.forClass(String.class), MediaType.APPLICATION_JSON)); + assertFalse(this.decoder.canDecode(ResolvableType.forClass(Integer.class), MediaType.TEXT_PLAIN)); + assertFalse(this.decoder.canDecode(ResolvableType.forClass(Object.class), MediaType.APPLICATION_JSON)); } @Test public void decode() throws InterruptedException { this.decoder = new StringDecoder(false); - Flux source = - Flux.just(stringBuffer("foo"), stringBuffer("bar"), stringBuffer("baz")); - Flux output = - this.decoder.decode(source, ResolvableType.forClass(String.class), null); - TestSubscriber - .subscribe(output) + Flux source = Flux.just(stringBuffer("foo"), stringBuffer("bar"), stringBuffer("baz")); + Flux output = this.decoder.decode(source, ResolvableType.forClass(String.class), null); + + TestSubscriber.subscribe(output) .assertNoError() .assertComplete() .assertValues("foo", "bar", "baz"); @@ -78,10 +65,9 @@ public class StringDecoderTests extends AbstractDataBufferAllocatingTestCase { DataBuffer fooBar = stringBuffer("\nfoo\r\nbar\r"); DataBuffer baz = stringBuffer("\nbaz"); Flux source = Flux.just(fooBar, baz); - Flux output = - decoder.decode(source, ResolvableType.forClass(String.class), null); - TestSubscriber - .subscribe(output) + Flux output = decoder.decode(source, ResolvableType.forClass(String.class), null); + + TestSubscriber.subscribe(output) .assertNoError() .assertComplete().assertValues("\n", "foo\r", "\n", "bar\r", "\n", "baz"); } @@ -89,22 +75,18 @@ public class StringDecoderTests extends AbstractDataBufferAllocatingTestCase { @Test public void decodeEmpty() throws InterruptedException { Flux source = Flux.just(stringBuffer("")); - Flux output = - this.decoder.decode(source, ResolvableType.forClass(String.class), null); - TestSubscriber - .subscribe(output) - .assertValues(""); + Flux output = this.decoder.decode(source, ResolvableType.forClass(String.class), null); + + TestSubscriber.subscribe(output).assertValues(""); } @Test - public void decodeOne() throws InterruptedException { + public void decodeToMono() throws InterruptedException { this.decoder = new StringDecoder(false); - Flux source = - Flux.just(stringBuffer("foo"), stringBuffer("bar"), stringBuffer("baz")); - Mono output = - this.decoder.decodeOne(source, ResolvableType.forClass(String.class), null); - TestSubscriber - .subscribe(output) + Flux source = Flux.just(stringBuffer("foo"), stringBuffer("bar"), stringBuffer("baz")); + Mono output = this.decoder.decodeToMono(source, ResolvableType.forClass(String.class), null); + + TestSubscriber.subscribe(output) .assertNoError() .assertComplete() .assertValues("foobarbaz"); diff --git a/spring-web-reactive/src/test/java/org/springframework/http/codec/json/JacksonJsonDecoderTests.java b/spring-web-reactive/src/test/java/org/springframework/http/codec/json/JacksonJsonDecoderTests.java index 0321bd23470..99aacd522c2 100644 --- a/spring-web-reactive/src/test/java/org/springframework/http/codec/json/JacksonJsonDecoderTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/http/codec/json/JacksonJsonDecoderTests.java @@ -66,7 +66,7 @@ public class JacksonJsonDecoderTests extends AbstractDataBufferAllocatingTestCas Method method = getClass().getDeclaredMethod("handle", List.class); ResolvableType elementType = ResolvableType.forMethodParameter(method, 0); - Mono mono = new JacksonJsonDecoder().decodeOne(source, elementType, null); + Mono mono = new JacksonJsonDecoder().decodeToMono(source, elementType, null); TestSubscriber.subscribe(mono).assertNoError().assertComplete(). assertValues(Arrays.asList(new Pojo("f1", "b1"), new Pojo("f2", "b2")));