Do not provide hints for can*() methods anymore
Issue: SPR-14557
This commit is contained in:
@@ -50,7 +50,7 @@ public abstract class AbstractDecoder<T> implements Decoder<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canDecode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
|
public boolean canDecode(ResolvableType elementType, MimeType mimeType) {
|
||||||
if (mimeType == null) {
|
if (mimeType == null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public abstract class AbstractEncoder<T> implements Encoder<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canEncode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
|
public boolean canEncode(ResolvableType elementType, MimeType mimeType) {
|
||||||
if (mimeType == null) {
|
if (mimeType == null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,9 +43,9 @@ public class ByteBufferDecoder extends AbstractDecoder<ByteBuffer> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canDecode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
|
public boolean canDecode(ResolvableType elementType, MimeType mimeType) {
|
||||||
Class<?> clazz = elementType.getRawClass();
|
Class<?> clazz = elementType.getRawClass();
|
||||||
return (super.canDecode(elementType, mimeType, hints) && ByteBuffer.class.isAssignableFrom(clazz));
|
return (super.canDecode(elementType, mimeType) && ByteBuffer.class.isAssignableFrom(clazz));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -42,9 +42,9 @@ public class ByteBufferEncoder extends AbstractEncoder<ByteBuffer> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canEncode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
|
public boolean canEncode(ResolvableType elementType, MimeType mimeType) {
|
||||||
Class<?> clazz = elementType.getRawClass();
|
Class<?> clazz = elementType.getRawClass();
|
||||||
return (super.canEncode(elementType, mimeType, hints) && ByteBuffer.class.isAssignableFrom(clazz));
|
return (super.canEncode(elementType, mimeType) && ByteBuffer.class.isAssignableFrom(clazz));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -49,9 +49,9 @@ public class CharSequenceEncoder extends AbstractEncoder<CharSequence> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canEncode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
|
public boolean canEncode(ResolvableType elementType, MimeType mimeType) {
|
||||||
Class<?> clazz = elementType.getRawClass();
|
Class<?> clazz = elementType.getRawClass();
|
||||||
return (super.canEncode(elementType, mimeType, hints) && CharSequence.class.isAssignableFrom(clazz));
|
return (super.canEncode(elementType, mimeType) && CharSequence.class.isAssignableFrom(clazz));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -43,10 +43,9 @@ public interface Decoder<T> {
|
|||||||
* type of the source stream.
|
* type of the source stream.
|
||||||
* @param elementType the target element type for the output stream
|
* @param elementType the target element type for the output stream
|
||||||
* @param mimeType the mime type associated with the stream to decode
|
* @param mimeType the mime type associated with the stream to decode
|
||||||
* @param hints additional information about how to do encode
|
|
||||||
* @return {@code true} if supported, {@code false} otherwise
|
* @return {@code true} if supported, {@code false} otherwise
|
||||||
*/
|
*/
|
||||||
boolean canDecode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints);
|
boolean canDecode(ResolvableType elementType, MimeType mimeType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decode a {@link DataBuffer} input stream into a Flux of {@code T}.
|
* Decode a {@link DataBuffer} input stream into a Flux of {@code T}.
|
||||||
|
|||||||
@@ -44,10 +44,9 @@ public interface Encoder<T> {
|
|||||||
* type for the output stream.
|
* type for the output stream.
|
||||||
* @param elementType the type of elements in the source stream
|
* @param elementType the type of elements in the source stream
|
||||||
* @param mimeType the MIME type for the output stream
|
* @param mimeType the MIME type for the output stream
|
||||||
* @param hints additional information about how to do encode
|
|
||||||
* @return {@code true} if supported, {@code false} otherwise
|
* @return {@code true} if supported, {@code false} otherwise
|
||||||
*/
|
*/
|
||||||
boolean canEncode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints);
|
boolean canEncode(ResolvableType elementType, MimeType mimeType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encode a stream of Objects of type {@code T} into a {@link DataBuffer}
|
* Encode a stream of Objects of type {@code T} into a {@link DataBuffer}
|
||||||
|
|||||||
@@ -46,11 +46,11 @@ public class ResourceDecoder extends AbstractDecoder<Resource> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canDecode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
|
public boolean canDecode(ResolvableType elementType, MimeType mimeType) {
|
||||||
Class<?> clazz = elementType.getRawClass();
|
Class<?> clazz = elementType.getRawClass();
|
||||||
return (InputStreamResource.class.equals(clazz) ||
|
return (InputStreamResource.class.equals(clazz) ||
|
||||||
clazz.isAssignableFrom(ByteArrayResource.class)) &&
|
clazz.isAssignableFrom(ByteArrayResource.class)) &&
|
||||||
super.canDecode(elementType, mimeType, hints);
|
super.canDecode(elementType, mimeType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -57,9 +57,9 @@ public class ResourceEncoder extends AbstractSingleValueEncoder<Resource> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canEncode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
|
public boolean canEncode(ResolvableType elementType, MimeType mimeType) {
|
||||||
Class<?> clazz = elementType.getRawClass();
|
Class<?> clazz = elementType.getRawClass();
|
||||||
return (super.canEncode(elementType, mimeType, hints) && Resource.class.isAssignableFrom(clazz));
|
return (super.canEncode(elementType, mimeType) && Resource.class.isAssignableFrom(clazz));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -78,8 +78,8 @@ public class StringDecoder extends AbstractDecoder<String> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canDecode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
|
public boolean canDecode(ResolvableType elementType, MimeType mimeType) {
|
||||||
return (super.canDecode(elementType, mimeType, hints) &&
|
return (super.canDecode(elementType, mimeType) &&
|
||||||
String.class.equals(elementType.getRawClass()));
|
String.class.equals(elementType.getRawClass()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,11 +42,11 @@ public class ByteBufferDecoderTests extends AbstractDataBufferAllocatingTestCase
|
|||||||
@Test
|
@Test
|
||||||
public void canDecode() {
|
public void canDecode() {
|
||||||
assertTrue(this.decoder.canDecode(ResolvableType.forClass(ByteBuffer.class),
|
assertTrue(this.decoder.canDecode(ResolvableType.forClass(ByteBuffer.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertFalse(this.decoder.canDecode(ResolvableType.forClass(Integer.class),
|
assertFalse(this.decoder.canDecode(ResolvableType.forClass(Integer.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertTrue(this.decoder.canDecode(ResolvableType.forClass(ByteBuffer.class),
|
assertTrue(this.decoder.canDecode(ResolvableType.forClass(ByteBuffer.class),
|
||||||
MimeTypeUtils.APPLICATION_JSON, Collections.emptyMap()));
|
MimeTypeUtils.APPLICATION_JSON));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -50,11 +50,11 @@ public class ByteBufferEncoderTests extends AbstractDataBufferAllocatingTestCase
|
|||||||
@Test
|
@Test
|
||||||
public void canEncode() {
|
public void canEncode() {
|
||||||
assertTrue(this.encoder.canEncode(ResolvableType.forClass(ByteBuffer.class),
|
assertTrue(this.encoder.canEncode(ResolvableType.forClass(ByteBuffer.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertFalse(this.encoder.canEncode(ResolvableType.forClass(Integer.class),
|
assertFalse(this.encoder.canEncode(ResolvableType.forClass(Integer.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertTrue(this.encoder.canEncode(ResolvableType.forClass(ByteBuffer.class),
|
assertTrue(this.encoder.canEncode(ResolvableType.forClass(ByteBuffer.class),
|
||||||
MimeTypeUtils.APPLICATION_JSON, Collections.emptyMap()));
|
MimeTypeUtils.APPLICATION_JSON));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -49,15 +49,15 @@ public class CharSequenceEncoderTests extends AbstractDataBufferAllocatingTestCa
|
|||||||
@Test
|
@Test
|
||||||
public void canWrite() {
|
public void canWrite() {
|
||||||
assertTrue(this.encoder.canEncode(ResolvableType.forClass(String.class),
|
assertTrue(this.encoder.canEncode(ResolvableType.forClass(String.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertTrue(this.encoder.canEncode(ResolvableType.forClass(StringBuilder.class),
|
assertTrue(this.encoder.canEncode(ResolvableType.forClass(StringBuilder.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertTrue(this.encoder.canEncode(ResolvableType.forClass(StringBuffer.class),
|
assertTrue(this.encoder.canEncode(ResolvableType.forClass(StringBuffer.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertFalse(this.encoder.canEncode(ResolvableType.forClass(Integer.class),
|
assertFalse(this.encoder.canEncode(ResolvableType.forClass(Integer.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertFalse(this.encoder.canEncode(ResolvableType.forClass(String.class),
|
assertFalse(this.encoder.canEncode(ResolvableType.forClass(String.class),
|
||||||
MimeTypeUtils.APPLICATION_JSON, Collections.emptyMap()));
|
MimeTypeUtils.APPLICATION_JSON));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -46,13 +46,13 @@ public class ResourceDecoderTests extends AbstractDataBufferAllocatingTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void canDecode() throws Exception {
|
public void canDecode() throws Exception {
|
||||||
assertTrue(this.decoder.canDecode(ResolvableType.forClass(InputStreamResource.class),
|
assertTrue(this.decoder.canDecode(ResolvableType.forClass(InputStreamResource.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertTrue(this.decoder.canDecode(ResolvableType.forClass(ByteArrayResource.class),
|
assertTrue(this.decoder.canDecode(ResolvableType.forClass(ByteArrayResource.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertTrue(this.decoder.canDecode(ResolvableType.forClass(Resource.class),
|
assertTrue(this.decoder.canDecode(ResolvableType.forClass(Resource.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertTrue(this.decoder.canDecode(ResolvableType.forClass(InputStreamResource.class),
|
assertTrue(this.decoder.canDecode(ResolvableType.forClass(InputStreamResource.class),
|
||||||
MimeTypeUtils.APPLICATION_JSON, Collections.emptyMap()));
|
MimeTypeUtils.APPLICATION_JSON));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -44,13 +44,13 @@ public class ResourceEncoderTests extends AbstractDataBufferAllocatingTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void canEncode() throws Exception {
|
public void canEncode() throws Exception {
|
||||||
assertTrue(this.encoder.canEncode(ResolvableType.forClass(InputStreamResource.class),
|
assertTrue(this.encoder.canEncode(ResolvableType.forClass(InputStreamResource.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertTrue(this.encoder.canEncode(ResolvableType.forClass(ByteArrayResource.class),
|
assertTrue(this.encoder.canEncode(ResolvableType.forClass(ByteArrayResource.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertTrue(this.encoder.canEncode(ResolvableType.forClass(Resource.class),
|
assertTrue(this.encoder.canEncode(ResolvableType.forClass(Resource.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertTrue(this.encoder.canEncode(ResolvableType.forClass(InputStreamResource.class),
|
assertTrue(this.encoder.canEncode(ResolvableType.forClass(InputStreamResource.class),
|
||||||
MimeTypeUtils.APPLICATION_JSON, Collections.emptyMap()));
|
MimeTypeUtils.APPLICATION_JSON));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -44,15 +44,15 @@ public class StringDecoderTests extends AbstractDataBufferAllocatingTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void canDecode() {
|
public void canDecode() {
|
||||||
assertTrue(this.decoder.canDecode(ResolvableType.forClass(String.class),
|
assertTrue(this.decoder.canDecode(ResolvableType.forClass(String.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertTrue(this.decoder.canDecode(ResolvableType.forClass(String.class),
|
assertTrue(this.decoder.canDecode(ResolvableType.forClass(String.class),
|
||||||
MimeTypeUtils.TEXT_HTML, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_HTML));
|
||||||
assertTrue(this.decoder.canDecode(ResolvableType.forClass(String.class),
|
assertTrue(this.decoder.canDecode(ResolvableType.forClass(String.class),
|
||||||
MimeTypeUtils.APPLICATION_JSON, Collections.emptyMap()));
|
MimeTypeUtils.APPLICATION_JSON));
|
||||||
assertFalse(this.decoder.canDecode(ResolvableType.forClass(Integer.class),
|
assertFalse(this.decoder.canDecode(ResolvableType.forClass(Integer.class),
|
||||||
MimeTypeUtils.TEXT_PLAIN, Collections.emptyMap()));
|
MimeTypeUtils.TEXT_PLAIN));
|
||||||
assertFalse(this.decoder.canDecode(ResolvableType.forClass(Object.class),
|
assertFalse(this.decoder.canDecode(ResolvableType.forClass(Object.class),
|
||||||
MimeTypeUtils.APPLICATION_JSON, Collections.emptyMap()));
|
MimeTypeUtils.APPLICATION_JSON));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ public abstract class BodyExtractors {
|
|||||||
MediaType contentType = contentType(request);
|
MediaType contentType = contentType(request);
|
||||||
Supplier<Stream<HttpMessageReader<?>>> messageReaders = strategies.messageReaders();
|
Supplier<Stream<HttpMessageReader<?>>> messageReaders = strategies.messageReaders();
|
||||||
return messageReaders.get()
|
return messageReaders.get()
|
||||||
.filter(r -> r.canRead(elementType, contentType, Collections.emptyMap()))
|
.filter(r -> r.canRead(elementType, contentType))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.map(BodyExtractors::<T>cast)
|
.map(BodyExtractors::<T>cast)
|
||||||
.map(readerFunction)
|
.map(readerFunction)
|
||||||
|
|||||||
@@ -208,8 +208,7 @@ public abstract class BodyInserters {
|
|||||||
// TODO: use ContentNegotiatingResultHandlerSupport
|
// TODO: use ContentNegotiatingResultHandlerSupport
|
||||||
MediaType contentType = response.getHeaders().getContentType();
|
MediaType contentType = response.getHeaders().getContentType();
|
||||||
return strategies.messageWriters().get()
|
return strategies.messageWriters().get()
|
||||||
.filter(messageWriter -> messageWriter.canWrite(bodyType, contentType, Collections
|
.filter(messageWriter -> messageWriter.canWrite(bodyType, contentType))
|
||||||
.emptyMap()))
|
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.map(BodyInserters::cast)
|
.map(BodyInserters::cast)
|
||||||
.map(messageWriter -> messageWriter
|
.map(messageWriter -> messageWriter
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ public class HttpMessageWriterView implements View {
|
|||||||
else if (map.size() == 1) {
|
else if (map.size() == 1) {
|
||||||
return map.values().iterator().next();
|
return map.values().iterator().next();
|
||||||
}
|
}
|
||||||
else if (getMessageWriter().canWrite(ResolvableType.forClass(Map.class), null, Collections.emptyMap())) {
|
else if (getMessageWriter().canWrite(ResolvableType.forClass(Map.class), null)) {
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -143,10 +143,10 @@ public class HttpMessageWriterView implements View {
|
|||||||
protected boolean isEligibleAttribute(String attributeName, Object attributeValue) {
|
protected boolean isEligibleAttribute(String attributeName, Object attributeValue) {
|
||||||
ResolvableType type = ResolvableType.forClass(attributeValue.getClass());
|
ResolvableType type = ResolvableType.forClass(attributeValue.getClass());
|
||||||
if (getModelKeys().isEmpty()) {
|
if (getModelKeys().isEmpty()) {
|
||||||
return getMessageWriter().canWrite(type, null, Collections.emptyMap());
|
return getMessageWriter().canWrite(type, null);
|
||||||
}
|
}
|
||||||
if (getModelKeys().contains(attributeName)) {
|
if (getModelKeys().contains(attributeName)) {
|
||||||
if (getMessageWriter().canWrite(type, null, Collections.emptyMap())) {
|
if (getMessageWriter().canWrite(type, null)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
|
|||||||
@@ -271,7 +271,7 @@ public class WebReactiveConfigurationTests {
|
|||||||
private void assertHasMessageReader(List<HttpMessageReader<?>> readers, Class<?> clazz, MediaType mediaType) {
|
private void assertHasMessageReader(List<HttpMessageReader<?>> readers, Class<?> clazz, MediaType mediaType) {
|
||||||
ResolvableType type = ResolvableType.forClass(clazz);
|
ResolvableType type = ResolvableType.forClass(clazz);
|
||||||
assertTrue(readers.stream()
|
assertTrue(readers.stream()
|
||||||
.filter(c -> mediaType == null || c.canRead(type, mediaType, Collections.emptyMap()))
|
.filter(c -> mediaType == null || c.canRead(type, mediaType))
|
||||||
.findAny()
|
.findAny()
|
||||||
.isPresent());
|
.isPresent());
|
||||||
}
|
}
|
||||||
@@ -279,7 +279,7 @@ public class WebReactiveConfigurationTests {
|
|||||||
private void assertHasMessageWriter(List<HttpMessageWriter<?>> writers, Class<?> clazz, MediaType mediaType) {
|
private void assertHasMessageWriter(List<HttpMessageWriter<?>> writers, Class<?> clazz, MediaType mediaType) {
|
||||||
ResolvableType type = ResolvableType.forClass(clazz);
|
ResolvableType type = ResolvableType.forClass(clazz);
|
||||||
assertTrue(writers.stream()
|
assertTrue(writers.stream()
|
||||||
.filter(c -> mediaType == null || c.canWrite(type, mediaType, Collections.emptyMap()))
|
.filter(c -> mediaType == null || c.canWrite(type, mediaType))
|
||||||
.findAny()
|
.findAny()
|
||||||
.isPresent());
|
.isPresent());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ public class StrategiesSupplierTests {
|
|||||||
private static class DummyMessageWriter implements HttpMessageWriter<Object> {
|
private static class DummyMessageWriter implements HttpMessageWriter<Object> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canWrite(ResolvableType type, MediaType mediaType, Map<String, Object> hints) {
|
public boolean canWrite(ResolvableType type, MediaType mediaType) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ public class StrategiesSupplierTests {
|
|||||||
private static class DummyMessageReader implements HttpMessageReader<Object> {
|
private static class DummyMessageReader implements HttpMessageReader<Object> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canRead(ResolvableType type, MediaType mediaType, Map<String, Object> hints) {
|
public boolean canRead(ResolvableType type, MediaType mediaType) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -56,8 +56,8 @@ public class DecoderHttpMessageReader<T> implements HttpMessageReader<T> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canRead(ResolvableType elementType, MediaType mediaType, Map<String, Object> hints) {
|
public boolean canRead(ResolvableType elementType, MediaType mediaType) {
|
||||||
return this.decoder != null && this.decoder.canDecode(elementType, mediaType, hints);
|
return this.decoder != null && this.decoder.canDecode(elementType, mediaType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -60,8 +60,8 @@ public class EncoderHttpMessageWriter<T> implements HttpMessageWriter<T> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canWrite(ResolvableType elementType, MediaType mediaType, Map<String, Object> hints) {
|
public boolean canWrite(ResolvableType elementType, MediaType mediaType) {
|
||||||
return this.encoder != null && this.encoder.canEncode(elementType, mediaType, hints);
|
return this.encoder != null && this.encoder.canEncode(elementType, mediaType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -42,10 +42,9 @@ public interface HttpMessageReader<T> {
|
|||||||
* @param elementType the stream element type to test for readability
|
* @param elementType the stream element type to test for readability
|
||||||
* @param mediaType the media type to read, can be {@code null} if not specified.
|
* @param mediaType the media type to read, can be {@code null} if not specified.
|
||||||
* Typically the value of a {@code Content-Type} header.
|
* Typically the value of a {@code Content-Type} header.
|
||||||
* @param hints additional information about how to do read
|
|
||||||
* @return {@code true} if readable; {@code false} otherwise
|
* @return {@code true} if readable; {@code false} otherwise
|
||||||
*/
|
*/
|
||||||
boolean canRead(ResolvableType elementType, MediaType mediaType, Map<String, Object> hints);
|
boolean canRead(ResolvableType elementType, MediaType mediaType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read a {@link Flux} of the given type form the given input message, and returns it.
|
* Read a {@link Flux} of the given type form the given input message, and returns it.
|
||||||
@@ -53,7 +52,7 @@ public interface HttpMessageReader<T> {
|
|||||||
* passed to the {@link #canRead canRead} method of this interface, which must have
|
* passed to the {@link #canRead canRead} method of this interface, which must have
|
||||||
* returned {@code true}.
|
* returned {@code true}.
|
||||||
* @param inputMessage the HTTP input message to read from
|
* @param inputMessage the HTTP input message to read from
|
||||||
* @param hints additional information about how to do read
|
* @param hints additional information about how to read the body
|
||||||
* @return the converted {@link Flux} of elements
|
* @return the converted {@link Flux} of elements
|
||||||
*/
|
*/
|
||||||
Flux<T> read(ResolvableType elementType, ReactiveHttpInputMessage inputMessage, Map<String, Object> hints);
|
Flux<T> read(ResolvableType elementType, ReactiveHttpInputMessage inputMessage, Map<String, Object> hints);
|
||||||
@@ -64,7 +63,7 @@ public interface HttpMessageReader<T> {
|
|||||||
* passed to the {@link #canRead canRead} method of this interface, which must have
|
* passed to the {@link #canRead canRead} method of this interface, which must have
|
||||||
* returned {@code true}.
|
* returned {@code true}.
|
||||||
* @param inputMessage the HTTP input message to read from
|
* @param inputMessage the HTTP input message to read from
|
||||||
* @param hints additional information about how to do read
|
* @param hints additional information about how to read the body
|
||||||
* @return the converted {@link Mono} of object
|
* @return the converted {@link Mono} of object
|
||||||
*/
|
*/
|
||||||
Mono<T> readMono(ResolvableType elementType, ReactiveHttpInputMessage inputMessage, Map<String, Object> hints);
|
Mono<T> readMono(ResolvableType elementType, ReactiveHttpInputMessage inputMessage, Map<String, Object> hints);
|
||||||
|
|||||||
@@ -42,10 +42,9 @@ public interface HttpMessageWriter<T> {
|
|||||||
* @param elementType the stream element type to test for writability
|
* @param elementType the stream element type to test for writability
|
||||||
* @param mediaType the media type to write, can be {@code null} if not specified.
|
* @param mediaType the media type to write, can be {@code null} if not specified.
|
||||||
* Typically the value of an {@code Accept} header.
|
* Typically the value of an {@code Accept} header.
|
||||||
* @param hints additional information about how to write
|
|
||||||
* @return {@code true} if writable; {@code false} otherwise
|
* @return {@code true} if writable; {@code false} otherwise
|
||||||
*/
|
*/
|
||||||
boolean canWrite(ResolvableType elementType, MediaType mediaType, Map<String, Object> hints);
|
boolean canWrite(ResolvableType elementType, MediaType mediaType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write an given object to the given output message.
|
* Write an given object to the given output message.
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public class ServerSentEventHttpMessageWriter implements HttpMessageWriter<Objec
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canWrite(ResolvableType elementType, MediaType mediaType, Map<String, Object> hints) {
|
public boolean canWrite(ResolvableType elementType, MediaType mediaType) {
|
||||||
return mediaType == null || TEXT_EVENT_STREAM.isCompatibleWith(mediaType);
|
return mediaType == null || TEXT_EVENT_STREAM.isCompatibleWith(mediaType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@ public class ServerSentEventHttpMessageWriter implements HttpMessageWriter<Objec
|
|||||||
ResolvableType elementType = ResolvableType.forClass(data.getClass());
|
ResolvableType elementType = ResolvableType.forClass(data.getClass());
|
||||||
Optional<Encoder<?>> encoder = dataEncoders
|
Optional<Encoder<?>> encoder = dataEncoders
|
||||||
.stream()
|
.stream()
|
||||||
.filter(e -> e.canEncode(elementType, MimeTypeUtils.APPLICATION_JSON, Collections.emptyMap()))
|
.filter(e -> e.canEncode(elementType, MimeTypeUtils.APPLICATION_JSON))
|
||||||
.findFirst();
|
.findFirst();
|
||||||
return ((Encoder<T>) encoder.orElseThrow(() -> new CodecException("No suitable encoder found!")))
|
return ((Encoder<T>) encoder.orElseThrow(() -> new CodecException("No suitable encoder found!")))
|
||||||
.encode(Mono.just((T) data), bufferFactory, elementType, MimeTypeUtils.APPLICATION_JSON, hints)
|
.encode(Mono.just((T) data), bufferFactory, elementType, MimeTypeUtils.APPLICATION_JSON, hints)
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public class Jackson2JsonDecoder extends AbstractJackson2Codec implements Decode
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canDecode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
|
public boolean canDecode(ResolvableType elementType, MimeType mimeType) {
|
||||||
if (mimeType == null) {
|
if (mimeType == null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class Jackson2JsonEncoder extends AbstractJackson2Codec implements Encode
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canEncode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
|
public boolean canEncode(ResolvableType elementType, MimeType mimeType) {
|
||||||
if (mimeType == null) {
|
if (mimeType == null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,8 +76,8 @@ public class Jaxb2XmlDecoder extends AbstractDecoder<Object> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canDecode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
|
public boolean canDecode(ResolvableType elementType, MimeType mimeType) {
|
||||||
if (super.canDecode(elementType, mimeType, hints)) {
|
if (super.canDecode(elementType, mimeType)) {
|
||||||
Class<?> outputClass = elementType.getRawClass();
|
Class<?> outputClass = elementType.getRawClass();
|
||||||
return outputClass.isAnnotationPresent(XmlRootElement.class) ||
|
return outputClass.isAnnotationPresent(XmlRootElement.class) ||
|
||||||
outputClass.isAnnotationPresent(XmlType.class);
|
outputClass.isAnnotationPresent(XmlType.class);
|
||||||
|
|||||||
@@ -53,8 +53,8 @@ public class Jaxb2XmlEncoder extends AbstractSingleValueEncoder<Object> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canEncode(ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
|
public boolean canEncode(ResolvableType elementType, MimeType mimeType) {
|
||||||
if (super.canEncode(elementType, mimeType, hints)) {
|
if (super.canEncode(elementType, mimeType)) {
|
||||||
Class<?> outputClass = elementType.getRawClass();
|
Class<?> outputClass = elementType.getRawClass();
|
||||||
return (outputClass.isAnnotationPresent(XmlRootElement.class) ||
|
return (outputClass.isAnnotationPresent(XmlRootElement.class) ||
|
||||||
outputClass.isAnnotationPresent(XmlType.class));
|
outputClass.isAnnotationPresent(XmlType.class));
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ public abstract class ResponseExtractors {
|
|||||||
ResolvableType responseType, MediaType contentType) {
|
ResolvableType responseType, MediaType contentType) {
|
||||||
|
|
||||||
return messageReaders.stream()
|
return messageReaders.stream()
|
||||||
.filter(e -> e.canRead(responseType, contentType, Collections.emptyMap()))
|
.filter(e -> e.canRead(responseType, contentType))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElseThrow(() ->
|
.orElseThrow(() ->
|
||||||
new WebClientException(
|
new WebClientException(
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ public final class WebClient {
|
|||||||
protected Optional<HttpMessageWriter<?>> resolveWriter(List<HttpMessageWriter<?>> messageWriters,
|
protected Optional<HttpMessageWriter<?>> resolveWriter(List<HttpMessageWriter<?>> messageWriters,
|
||||||
ResolvableType type, MediaType mediaType) {
|
ResolvableType type, MediaType mediaType) {
|
||||||
|
|
||||||
return messageWriters.stream().filter(e -> e.canWrite(type, mediaType, Collections.emptyMap())).findFirst();
|
return messageWriters.stream().filter(e -> e.canWrite(type, mediaType)).findFirst();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ public class RxJava1ResponseExtractors {
|
|||||||
ResolvableType responseType, MediaType contentType) {
|
ResolvableType responseType, MediaType contentType) {
|
||||||
|
|
||||||
return messageReaders.stream()
|
return messageReaders.stream()
|
||||||
.filter(e -> e.canRead(responseType, contentType, Collections.emptyMap()))
|
.filter(e -> e.canRead(responseType, contentType))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElseThrow(() ->
|
.orElseThrow(() ->
|
||||||
new WebClientException(
|
new WebClientException(
|
||||||
|
|||||||
@@ -46,20 +46,19 @@ public class ServerSentEventHttpMessageWriterTests extends AbstractDataBufferAll
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void nullMimeType() {
|
public void nullMimeType() {
|
||||||
assertTrue(messageWriter.canWrite(ResolvableType.forClass(Object.class), null,
|
assertTrue(messageWriter.canWrite(ResolvableType.forClass(Object.class), null));
|
||||||
Collections.emptyMap()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void unsupportedMimeType() {
|
public void unsupportedMimeType() {
|
||||||
assertFalse(messageWriter.canWrite(ResolvableType.forClass(Object.class),
|
assertFalse(messageWriter.canWrite(ResolvableType.forClass(Object.class),
|
||||||
new MediaType("foo", "bar"), Collections.emptyMap()));
|
new MediaType("foo", "bar")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void supportedMimeType() {
|
public void supportedMimeType() {
|
||||||
assertTrue(messageWriter.canWrite(ResolvableType.forClass(Object.class),
|
assertTrue(messageWriter.canWrite(ResolvableType.forClass(Object.class),
|
||||||
new MediaType("text", "event-stream"), Collections.emptyMap()));
|
new MediaType("text", "event-stream")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -47,8 +47,8 @@ public class Jackson2JsonDecoderTests extends AbstractDataBufferAllocatingTestCa
|
|||||||
public void canDecode() {
|
public void canDecode() {
|
||||||
Jackson2JsonDecoder decoder = new Jackson2JsonDecoder();
|
Jackson2JsonDecoder decoder = new Jackson2JsonDecoder();
|
||||||
|
|
||||||
assertTrue(decoder.canDecode(null, MediaType.APPLICATION_JSON, Collections.emptyMap()));
|
assertTrue(decoder.canDecode(null, MediaType.APPLICATION_JSON));
|
||||||
assertFalse(decoder.canDecode(null, MediaType.APPLICATION_XML, Collections.emptyMap()));
|
assertFalse(decoder.canDecode(null, MediaType.APPLICATION_XML));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ public class Jackson2JsonEncoderTests extends AbstractDataBufferAllocatingTestCa
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void canEncode() {
|
public void canEncode() {
|
||||||
assertTrue(this.encoder.canEncode(null, MediaType.APPLICATION_JSON, Collections.emptyMap()));
|
assertTrue(this.encoder.canEncode(null, MediaType.APPLICATION_JSON));
|
||||||
assertFalse(this.encoder.canEncode(null, MediaType.APPLICATION_XML, Collections.emptyMap()));
|
assertFalse(this.encoder.canEncode(null, MediaType.APPLICATION_XML));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -72,17 +72,15 @@ public class Jaxb2XmlDecoderTests extends AbstractDataBufferAllocatingTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void canDecode() {
|
public void canDecode() {
|
||||||
assertTrue(this.decoder.canDecode(ResolvableType.forClass(Pojo.class),
|
assertTrue(this.decoder.canDecode(ResolvableType.forClass(Pojo.class),
|
||||||
MediaType.APPLICATION_XML, Collections.emptyMap()));
|
MediaType.APPLICATION_XML));
|
||||||
assertTrue(this.decoder.canDecode(ResolvableType.forClass(Pojo.class),
|
assertTrue(this.decoder.canDecode(ResolvableType.forClass(Pojo.class),
|
||||||
MediaType.TEXT_XML, Collections.emptyMap()));
|
MediaType.TEXT_XML));
|
||||||
assertFalse(this.decoder.canDecode(ResolvableType.forClass(Pojo.class),
|
assertFalse(this.decoder.canDecode(ResolvableType.forClass(Pojo.class),
|
||||||
MediaType.APPLICATION_JSON, Collections.emptyMap()));
|
MediaType.APPLICATION_JSON));
|
||||||
|
|
||||||
assertTrue(this.decoder.canDecode(ResolvableType.forClass(TypePojo.class),
|
assertTrue(this.decoder.canDecode(ResolvableType.forClass(TypePojo.class),
|
||||||
MediaType.APPLICATION_XML, Collections.emptyMap()));
|
MediaType.APPLICATION_XML));
|
||||||
|
|
||||||
assertFalse(this.decoder.canDecode(ResolvableType.forClass(getClass()),
|
assertFalse(this.decoder.canDecode(ResolvableType.forClass(getClass()),
|
||||||
MediaType.APPLICATION_XML, Collections.emptyMap()));
|
MediaType.APPLICATION_XML));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -46,18 +46,18 @@ public class Jaxb2XmlEncoderTests extends AbstractDataBufferAllocatingTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void canEncode() {
|
public void canEncode() {
|
||||||
assertTrue(this.encoder.canEncode(ResolvableType.forClass(Pojo.class),
|
assertTrue(this.encoder.canEncode(ResolvableType.forClass(Pojo.class),
|
||||||
MediaType.APPLICATION_XML, Collections.emptyMap()));
|
MediaType.APPLICATION_XML));
|
||||||
assertTrue(this.encoder.canEncode(ResolvableType.forClass(Pojo.class),
|
assertTrue(this.encoder.canEncode(ResolvableType.forClass(Pojo.class),
|
||||||
MediaType.TEXT_XML, Collections.emptyMap()));
|
MediaType.TEXT_XML));
|
||||||
assertFalse(this.encoder.canEncode(ResolvableType.forClass(Pojo.class),
|
assertFalse(this.encoder.canEncode(ResolvableType.forClass(Pojo.class),
|
||||||
MediaType.APPLICATION_JSON, Collections.emptyMap()));
|
MediaType.APPLICATION_JSON));
|
||||||
|
|
||||||
assertTrue(this.encoder.canEncode(
|
assertTrue(this.encoder.canEncode(
|
||||||
ResolvableType.forClass(Jaxb2XmlDecoderTests.TypePojo.class),
|
ResolvableType.forClass(Jaxb2XmlDecoderTests.TypePojo.class),
|
||||||
MediaType.APPLICATION_XML, Collections.emptyMap()));
|
MediaType.APPLICATION_XML));
|
||||||
|
|
||||||
assertFalse(this.encoder.canEncode(ResolvableType.forClass(getClass()),
|
assertFalse(this.encoder.canEncode(ResolvableType.forClass(getClass()),
|
||||||
MediaType.APPLICATION_XML, Collections.emptyMap()));
|
MediaType.APPLICATION_XML));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user