From 54c2e866c34c1aa5c5b0d24522d3833a5fb5a668 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Fri, 10 Jun 2016 10:59:32 +0200 Subject: [PATCH] Renamed getSupportedMimeTypes() in [En|De]coder Renamed getSupportedMimeTypes() to getEncodableMimeTypes and getDecodableMimeTypes. This will allow for both Encoder and Decoder to be implemented in the same class. This issue fixes #113. --- .../springframework/core/codec/Decoder.java | 2 +- .../springframework/core/codec/Encoder.java | 2 +- .../core/codec/support/AbstractDecoder.java | 17 +++++++--------- .../core/codec/support/AbstractEncoder.java | 17 +++++++--------- .../reactive/CodecHttpMessageConverter.java | 20 ++++++++++++------- 5 files changed, 29 insertions(+), 29 deletions(-) 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 cfecb61048..e3b6804f95 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 @@ -63,6 +63,6 @@ public interface Decoder { /** * Return the list of MIME types this decoder supports. */ - List getSupportedMimeTypes(); + List getDecodableMimeTypes(); } diff --git a/spring-web-reactive/src/main/java/org/springframework/core/codec/Encoder.java b/spring-web-reactive/src/main/java/org/springframework/core/codec/Encoder.java index 62fa412601..93ea941ee8 100644 --- a/spring-web-reactive/src/main/java/org/springframework/core/codec/Encoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/core/codec/Encoder.java @@ -66,6 +66,6 @@ public interface Encoder { /** * Return the list of mime types this encoder supports. */ - List getSupportedMimeTypes(); + List getEncodableMimeTypes(); } diff --git a/spring-web-reactive/src/main/java/org/springframework/core/codec/support/AbstractDecoder.java b/spring-web-reactive/src/main/java/org/springframework/core/codec/support/AbstractDecoder.java index b659b3b6d5..dde5ee7d6f 100644 --- a/spring-web-reactive/src/main/java/org/springframework/core/codec/support/AbstractDecoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/core/codec/support/AbstractDecoder.java @@ -26,19 +26,20 @@ import org.springframework.util.MimeType; /** * @author Sebastien Deleuze + * @author Arjen Poutsma */ public abstract class AbstractDecoder implements Decoder { - private List supportedMimeTypes = Collections.emptyList(); + private List decodableMimeTypes = Collections.emptyList(); protected AbstractDecoder(MimeType... supportedMimeTypes) { - this.supportedMimeTypes = Arrays.asList(supportedMimeTypes); + this.decodableMimeTypes = Arrays.asList(supportedMimeTypes); } @Override - public List getSupportedMimeTypes() { - return this.supportedMimeTypes; + public List getDecodableMimeTypes() { + return this.decodableMimeTypes; } @Override @@ -46,12 +47,8 @@ public abstract class AbstractDecoder implements Decoder { if (mimeType == null) { return true; } - for (MimeType supportedMimeType : this.supportedMimeTypes) { - if (supportedMimeType.isCompatibleWith(mimeType)) { - return true; - } - } - return false; + return this.decodableMimeTypes.stream(). + anyMatch(mt -> mt.isCompatibleWith(mimeType)); } } diff --git a/spring-web-reactive/src/main/java/org/springframework/core/codec/support/AbstractEncoder.java b/spring-web-reactive/src/main/java/org/springframework/core/codec/support/AbstractEncoder.java index 079a8beb22..9bb7cfd315 100644 --- a/spring-web-reactive/src/main/java/org/springframework/core/codec/support/AbstractEncoder.java +++ b/spring-web-reactive/src/main/java/org/springframework/core/codec/support/AbstractEncoder.java @@ -26,19 +26,20 @@ import org.springframework.util.MimeType; /** * @author Sebastien Deleuze + * @author Arjen Poutsma */ public abstract class AbstractEncoder implements Encoder { - private List supportedMimeTypes = Collections.emptyList(); + private List encodableMimeTypes = Collections.emptyList(); protected AbstractEncoder(MimeType... supportedMimeTypes) { - this.supportedMimeTypes = Arrays.asList(supportedMimeTypes); + this.encodableMimeTypes = Arrays.asList(supportedMimeTypes); } @Override - public List getSupportedMimeTypes() { - return this.supportedMimeTypes; + public List getEncodableMimeTypes() { + return this.encodableMimeTypes; } @Override @@ -46,12 +47,8 @@ public abstract class AbstractEncoder implements Encoder { if (mimeType == null) { return true; } - for (MimeType supportedMimeType : this.supportedMimeTypes) { - if (supportedMimeType.isCompatibleWith(mimeType)) { - return true; - } - } - return false; + return this.encodableMimeTypes.stream(). + anyMatch(mt -> mt.isCompatibleWith(mimeType)); } } 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 207fbf506a..804ea72207 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 @@ -18,7 +18,6 @@ package org.springframework.http.converter.reactive; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; @@ -47,6 +46,10 @@ public class CodecHttpMessageConverter implements HttpMessageConverter { private final Decoder decoder; + private final List readableMediaTypes; + + private final List writableMediaTypes; + /** * Create a {@code CodecHttpMessageConverter} with the given {@link Encoder}. When * using this constructor, all read-related methods will in {@code false} or an @@ -76,6 +79,13 @@ public class CodecHttpMessageConverter implements HttpMessageConverter { public CodecHttpMessageConverter(Encoder encoder, Decoder decoder) { this.encoder = encoder; this.decoder = decoder; + + this.readableMediaTypes = decoder != null ? + MediaTypeUtils.toMediaTypes(decoder.getDecodableMimeTypes()) : + Collections.emptyList(); + this.writableMediaTypes = encoder != null ? + MediaTypeUtils.toMediaTypes(encoder.getEncodableMimeTypes()) : + Collections.emptyList(); } @Override @@ -90,16 +100,12 @@ public class CodecHttpMessageConverter implements HttpMessageConverter { @Override public List getReadableMediaTypes() { - return this.decoder != null ? this.decoder.getSupportedMimeTypes().stream(). - map(MediaTypeUtils::toMediaType). - collect(Collectors.toList()) : Collections.emptyList(); + return this.readableMediaTypes; } @Override public List getWritableMediaTypes() { - return this.encoder != null ? this.encoder.getSupportedMimeTypes().stream(). - map(MediaTypeUtils::toMediaType). - collect(Collectors.toList()) : Collections.emptyList(); + return this.writableMediaTypes; } @Override