Consistent use of ResolvableType.toClass() for assignability checks

Issue: SPR-17086
This commit is contained in:
Juergen Hoeller
2018-11-12 20:29:37 +01:00
parent 3a66927bd2
commit 40148c0560
22 changed files with 64 additions and 94 deletions

View File

@@ -34,7 +34,6 @@ import org.springframework.util.MimeTypeUtils;
*/
public class ByteArrayDecoder extends AbstractDataBufferDecoder<byte[]> {
public ByteArrayDecoder() {
super(MimeTypeUtils.ALL);
}
@@ -42,8 +41,7 @@ public class ByteArrayDecoder extends AbstractDataBufferDecoder<byte[]> {
@Override
public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) {
Class<?> clazz = elementType.getRawClass();
return (super.canDecode(elementType, mimeType) && byte[].class == clazz);
return (elementType.resolve() == byte[].class && super.canDecode(elementType, mimeType));
}
@Override

View File

@@ -36,7 +36,6 @@ import org.springframework.util.MimeTypeUtils;
*/
public class ByteBufferDecoder extends AbstractDataBufferDecoder<ByteBuffer> {
public ByteBufferDecoder() {
super(MimeTypeUtils.ALL);
}
@@ -44,8 +43,8 @@ public class ByteBufferDecoder extends AbstractDataBufferDecoder<ByteBuffer> {
@Override
public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) {
Class<?> clazz = elementType.getRawClass();
return (super.canDecode(elementType, mimeType) && clazz != null && ByteBuffer.class.isAssignableFrom(clazz));
return (ByteBuffer.class.isAssignableFrom(elementType.toClass()) &&
super.canDecode(elementType, mimeType));
}
@Override

View File

@@ -45,7 +45,6 @@ import org.springframework.util.MimeTypeUtils;
*/
public class DataBufferDecoder extends AbstractDataBufferDecoder<DataBuffer> {
public DataBufferDecoder() {
super(MimeTypeUtils.ALL);
}
@@ -53,9 +52,8 @@ public class DataBufferDecoder extends AbstractDataBufferDecoder<DataBuffer> {
@Override
public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) {
Class<?> clazz = elementType.getRawClass();
return (super.canDecode(elementType, mimeType) &&
clazz != null && DataBuffer.class.isAssignableFrom(clazz));
return (DataBuffer.class.isAssignableFrom(elementType.toClass()) &&
super.canDecode(elementType, mimeType));
}
@Override

View File

@@ -29,7 +29,6 @@ import org.springframework.core.io.Resource;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.MimeType;
import org.springframework.util.MimeTypeUtils;
@@ -42,7 +41,6 @@ import org.springframework.util.MimeTypeUtils;
*/
public class ResourceDecoder extends AbstractDataBufferDecoder<Resource> {
public ResourceDecoder() {
super(MimeTypeUtils.ALL);
}
@@ -50,8 +48,8 @@ public class ResourceDecoder extends AbstractDataBufferDecoder<Resource> {
@Override
public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) {
Class<?> clazz = elementType.getRawClass();
return clazz != null && Resource.class.isAssignableFrom(clazz) && super.canDecode(elementType, mimeType);
return (Resource.class.isAssignableFrom(elementType.toClass()) &&
super.canDecode(elementType, mimeType));
}
@Override
@@ -69,14 +67,12 @@ public class ResourceDecoder extends AbstractDataBufferDecoder<Resource> {
dataBuffer.read(bytes);
DataBufferUtils.release(dataBuffer);
Class<?> clazz = elementType.getRawClass();
Assert.state(clazz != null, "No resource class");
if (logger.isDebugEnabled()) {
logger.debug(Hints.getLogPrefix(hints) + "Read " + bytes.length + " bytes");
}
if (InputStreamResource.class == clazz) {
Class<?> clazz = elementType.toClass();
if (clazz == InputStreamResource.class) {
return new InputStreamResource(new ByteArrayInputStream(bytes));
}
else if (Resource.class.isAssignableFrom(clazz)) {

View File

@@ -64,7 +64,7 @@ public final class StringDecoder extends AbstractDataBufferDecoder<String> {
public static final List<String> DEFAULT_DELIMITERS = Arrays.asList("\r\n", "\n");
private static final List<byte[]> DEFAULT_DELIMITER_BYTES = DEFAULT_DELIMITERS.stream()
.map(s -> s.getBytes(StandardCharsets.UTF_8))
.map(str -> str.getBytes(StandardCharsets.UTF_8))
.collect(Collectors.toList());
@@ -83,8 +83,7 @@ public final class StringDecoder extends AbstractDataBufferDecoder<String> {
@Override
public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) {
return (super.canDecode(elementType, mimeType) &&
String.class.equals(elementType.getRawClass()));
return (elementType.resolve() == String.class && super.canDecode(elementType, mimeType));
}
@Override