diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java index 9e702c2e01..5bb1c57764 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java @@ -1093,8 +1093,6 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto ResolvableType requiredType, @Nullable Object[] args, boolean nonUniqueAsNull) throws BeansException { Assert.notNull(requiredType, "Required type must not be null"); - Class clazz = requiredType.getRawClass(); - Assert.notNull(clazz, "Required type must have a raw Class"); String[] candidateNames = getBeanNamesForType(requiredType); if (candidateNames.length > 1) { @@ -1111,7 +1109,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto if (candidateNames.length == 1) { String beanName = candidateNames[0]; - return new NamedBeanHolder<>(beanName, (T) getBean(beanName, clazz, args)); + return new NamedBeanHolder<>(beanName, (T) getBean(beanName, requiredType.toClass(), args)); } else if (candidateNames.length > 1) { Map candidates = new LinkedHashMap<>(candidateNames.length); @@ -1124,14 +1122,14 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto candidates.put(beanName, getType(beanName)); } } - String candidateName = determinePrimaryCandidate(candidates, clazz); + String candidateName = determinePrimaryCandidate(candidates, requiredType.toClass()); if (candidateName == null) { - candidateName = determineHighestPriorityCandidate(candidates, clazz); + candidateName = determineHighestPriorityCandidate(candidates, requiredType.toClass()); } if (candidateName != null) { Object beanInstance = candidates.get(candidateName); if (beanInstance == null || beanInstance instanceof Class) { - beanInstance = getBean(candidateName, clazz, args); + beanInstance = getBean(candidateName, requiredType.toClass(), args); } return new NamedBeanHolder<>(candidateName, (T) beanInstance); } diff --git a/spring-context/src/main/java/org/springframework/context/event/ApplicationListenerMethodAdapter.java b/spring-context/src/main/java/org/springframework/context/event/ApplicationListenerMethodAdapter.java index ee8d708cd4..9028ddbe9e 100644 --- a/spring-context/src/main/java/org/springframework/context/event/ApplicationListenerMethodAdapter.java +++ b/spring-context/src/main/java/org/springframework/context/event/ApplicationListenerMethodAdapter.java @@ -148,8 +148,7 @@ public class ApplicationListenerMethodAdapter implements GenericApplicationListe if (declaredEventType.isAssignableFrom(eventType)) { return true; } - Class eventClass = eventType.getRawClass(); - if (eventClass != null && PayloadApplicationEvent.class.isAssignableFrom(eventClass)) { + if (PayloadApplicationEvent.class.isAssignableFrom(eventType.toClass())) { ResolvableType payloadType = eventType.as(PayloadApplicationEvent.class).getGeneric(); if (declaredEventType.isAssignableFrom(payloadType)) { return true; @@ -202,8 +201,7 @@ public class ApplicationListenerMethodAdapter implements GenericApplicationListe if (this.method.getParameterCount() == 0) { return new Object[0]; } - Class eventClass = declaredEventType.getRawClass(); - if ((eventClass == null || !ApplicationEvent.class.isAssignableFrom(eventClass)) && + if (!ApplicationEvent.class.isAssignableFrom(declaredEventType.toClass()) && event instanceof PayloadApplicationEvent) { return new Object[] {((PayloadApplicationEvent) event).getPayload()}; } @@ -358,12 +356,12 @@ public class ApplicationListenerMethodAdapter implements GenericApplicationListe } } for (ResolvableType declaredEventType : this.declaredEventTypes) { - Class eventClass = declaredEventType.getRawClass(); - if ((eventClass == null || !ApplicationEvent.class.isAssignableFrom(eventClass)) && + Class eventClass = declaredEventType.toClass(); + if (!ApplicationEvent.class.isAssignableFrom(eventClass) && payloadType != null && declaredEventType.isAssignableFrom(payloadType)) { return declaredEventType; } - if (eventClass != null && eventClass.isInstance(event)) { + if (eventClass.isInstance(event)) { return declaredEventType; } } diff --git a/spring-core/src/main/java/org/springframework/core/codec/ByteArrayDecoder.java b/spring-core/src/main/java/org/springframework/core/codec/ByteArrayDecoder.java index c5c41256bb..e937418662 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/ByteArrayDecoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/ByteArrayDecoder.java @@ -34,7 +34,6 @@ import org.springframework.util.MimeTypeUtils; */ public class ByteArrayDecoder extends AbstractDataBufferDecoder { - public ByteArrayDecoder() { super(MimeTypeUtils.ALL); } @@ -42,8 +41,7 @@ public class ByteArrayDecoder extends AbstractDataBufferDecoder { @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 diff --git a/spring-core/src/main/java/org/springframework/core/codec/ByteBufferDecoder.java b/spring-core/src/main/java/org/springframework/core/codec/ByteBufferDecoder.java index ec79280e5e..f57e018390 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/ByteBufferDecoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/ByteBufferDecoder.java @@ -36,7 +36,6 @@ import org.springframework.util.MimeTypeUtils; */ public class ByteBufferDecoder extends AbstractDataBufferDecoder { - public ByteBufferDecoder() { super(MimeTypeUtils.ALL); } @@ -44,8 +43,8 @@ public class ByteBufferDecoder extends AbstractDataBufferDecoder { @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 diff --git a/spring-core/src/main/java/org/springframework/core/codec/DataBufferDecoder.java b/spring-core/src/main/java/org/springframework/core/codec/DataBufferDecoder.java index 5061cd121c..d0993466e0 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/DataBufferDecoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/DataBufferDecoder.java @@ -45,7 +45,6 @@ import org.springframework.util.MimeTypeUtils; */ public class DataBufferDecoder extends AbstractDataBufferDecoder { - public DataBufferDecoder() { super(MimeTypeUtils.ALL); } @@ -53,9 +52,8 @@ public class DataBufferDecoder extends AbstractDataBufferDecoder { @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 diff --git a/spring-core/src/main/java/org/springframework/core/codec/ResourceDecoder.java b/spring-core/src/main/java/org/springframework/core/codec/ResourceDecoder.java index f3dade6f3c..d8e859280f 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/ResourceDecoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/ResourceDecoder.java @@ -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 { - public ResourceDecoder() { super(MimeTypeUtils.ALL); } @@ -50,8 +48,8 @@ public class ResourceDecoder extends AbstractDataBufferDecoder { @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 { 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)) { diff --git a/spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java b/spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java index 6525afcb0b..7825c3f8bc 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java @@ -64,7 +64,7 @@ public final class StringDecoder extends AbstractDataBufferDecoder { public static final List DEFAULT_DELIMITERS = Arrays.asList("\r\n", "\n"); private static final List 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 { @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 diff --git a/spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageWriter.java index 63655b06a3..ea93d9f223 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageWriter.java @@ -105,8 +105,7 @@ public class FormHttpMessageWriter extends LoggingCodecSupport @Override public boolean canWrite(ResolvableType elementType, @Nullable MediaType mediaType) { - Class rawClass = elementType.getRawClass(); - if (rawClass == null || !MultiValueMap.class.isAssignableFrom(rawClass)) { + if (!MultiValueMap.class.isAssignableFrom(elementType.toClass())) { return false; } if (MediaType.APPLICATION_FORM_URLENCODED.isCompatibleWith(mediaType)) { diff --git a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java index 9972241ad5..0cc0ba72af 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java @@ -93,14 +93,13 @@ public class ServerSentEventHttpMessageReader implements HttpMessageReader rawClass = elementType.getRawClass(); - return (rawClass != null && ServerSentEvent.class.isAssignableFrom(rawClass)); + return ServerSentEvent.class.isAssignableFrom(elementType.toClass()); } @Override - public Flux read(ResolvableType elementType, ReactiveHttpInputMessage message, - Map hints) { + public Flux read( + ResolvableType elementType, ReactiveHttpInputMessage message, Map hints) { boolean shouldWrap = isServerSentEvent(elementType); ResolvableType valueType = (shouldWrap ? elementType.getGeneric() : elementType); @@ -170,13 +169,13 @@ public class ServerSentEventHttpMessageReader implements HttpMessageReader readMono(ResolvableType elementType, ReactiveHttpInputMessage message, - Map hints) { + public Mono readMono( + ResolvableType elementType, ReactiveHttpInputMessage message, Map hints) { // We're ahead of String + "*/*" // Let's see if we can aggregate the output (lest we time out)... - if (String.class.equals(elementType.getRawClass())) { + if (elementType.resolve() == String.class) { Flux body = message.getBody(); return stringDecoder.decodeToMono(body, elementType, null, null).cast(Object.class); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java index 18814135ae..01ef4b57f6 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java @@ -113,8 +113,7 @@ public class ServerSentEventHttpMessageWriter implements HttpMessageWriter> encode(Publisher input, ResolvableType elementType, MediaType mediaType, DataBufferFactory factory, Map hints) { - Class elementClass = elementType.getRawClass(); - ResolvableType valueType = (elementClass != null && ServerSentEvent.class.isAssignableFrom(elementClass) ? + ResolvableType valueType = (ServerSentEvent.class.isAssignableFrom(elementType.toClass()) ? elementType.getGeneric() : elementType); return Flux.from(input).map(element -> { diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java index 26b8ab9c7a..98f2c64672 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java @@ -177,10 +177,9 @@ public class MultipartHttpMessageWriter extends LoggingCodecSupport @Override public boolean canWrite(ResolvableType elementType, @Nullable MediaType mediaType) { - Class rawClass = elementType.getRawClass(); - return rawClass != null && MultiValueMap.class.isAssignableFrom(rawClass) && + return (MultiValueMap.class.isAssignableFrom(elementType.toClass()) && (mediaType == null || - this.supportedMediaTypes.stream().anyMatch(m -> m.isCompatibleWith(mediaType))); + this.supportedMediaTypes.stream().anyMatch(element -> element.isCompatibleWith(mediaType)))); } @Override @@ -281,7 +280,7 @@ public class MultipartHttpMessageWriter extends LoggingCodecSupport if (body instanceof Resource) { outputHeaders.setContentDispositionFormData(name, ((Resource) body).getFilename()); } - else if (Resource.class.equals(resolvableType.getRawClass())) { + else if (resolvableType.resolve() == Resource.class) { body = (T) Mono.from((Publisher) body).doOnNext(o -> outputHeaders .setContentDispositionFormData(name, ((Resource) o).getFilename())); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/protobuf/ProtobufDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/protobuf/ProtobufDecoder.java index d47c947105..94c680edc4 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/protobuf/ProtobufDecoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/protobuf/ProtobufDecoder.java @@ -168,13 +168,11 @@ public class ProtobufDecoder extends ProtobufCodecSupport implements Decoder apply(DataBuffer input) { try { @@ -186,13 +184,13 @@ public class ProtobufDecoder extends ProtobufCodecSupport implements Decoder this.maxMessageSize) { throw new DecodingException( "The number of bytes to read parsed in the incoming stream (" + - this.messageBytesToRead + ") exceeds the configured limit (" + this.maxMessageSize + ")"); + this.messageBytesToRead + ") exceeds the configured limit (" + this.maxMessageSize + ")"); } this.output = input.factory().allocateBuffer(this.messageBytesToRead); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java index 8e9745b4b8..0ed9580904 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java @@ -84,9 +84,9 @@ public class Jaxb2XmlDecoder extends AbstractDecoder { @Override public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { if (super.canDecode(elementType, mimeType)) { - Class outputClass = elementType.getRawClass(); - return (outputClass != null && (outputClass.isAnnotationPresent(XmlRootElement.class) || - outputClass.isAnnotationPresent(XmlType.class))); + Class outputClass = elementType.toClass(); + return (outputClass.isAnnotationPresent(XmlRootElement.class) || + outputClass.isAnnotationPresent(XmlType.class)); } else { return false; @@ -97,12 +97,10 @@ public class Jaxb2XmlDecoder extends AbstractDecoder { public Flux decode(Publisher inputStream, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { - Class outputClass = elementType.getRawClass(); - Assert.state(outputClass != null, "Unresolvable output class"); - Flux xmlEventFlux = this.xmlEventDecoder.decode( inputStream, ResolvableType.forClass(XMLEvent.class), mimeType, hints); + Class outputClass = elementType.toClass(); QName typeName = toQName(outputClass); Flux> splitEvents = split(xmlEventFlux, typeName); @@ -119,6 +117,7 @@ public class Jaxb2XmlDecoder extends AbstractDecoder { @Override public Mono decodeToMono(Publisher inputStream, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { + return decode(inputStream, elementType, mimeType, hints).singleOrEmpty(); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java index 46d2f8dfde..905c60e83d 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java @@ -45,8 +45,8 @@ import org.springframework.util.MimeTypeUtils; * Encode from single value to a byte stream containing XML elements. * *

{@link javax.xml.bind.annotation.XmlElements @XmlElements} and - * {@link javax.xml.bind.annotation.XmlElement @XmlElement} can be used to specify how - * collections should be marshalled. + * {@link javax.xml.bind.annotation.XmlElement @XmlElement} can be used + * to specify how collections should be marshalled. * * @author Sebastien Deleuze * @author Arjen Poutsma @@ -73,7 +73,6 @@ public class Jaxb2XmlEncoder extends AbstractSingleValueEncoder { else { return false; } - } @Override diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/HandlerResultHandlerSupport.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/HandlerResultHandlerSupport.java index b9471e1370..34706f2681 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/HandlerResultHandlerSupport.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/HandlerResultHandlerSupport.java @@ -101,20 +101,18 @@ public abstract class HandlerResultHandlerSupport implements Ordered { /** * Get a {@code ReactiveAdapter} for the top-level return value type. - * @return the matching adapter or {@code null} + * @return the matching adapter, or {@code null} if none */ @Nullable protected ReactiveAdapter getAdapter(HandlerResult result) { - Class returnType = result.getReturnType().getRawClass(); - return getAdapterRegistry().getAdapter(returnType, result.getReturnValue()); + return getAdapterRegistry().getAdapter(result.getReturnType().resolve(), result.getReturnValue()); } /** - * Select the best media type for the current request through a content - * negotiation algorithm. + * Select the best media type for the current request through a content negotiation algorithm. * @param exchange the current request * @param producibleTypesSupplier the media types that can be produced for the current request - * @return the selected media type or {@code null} + * @return the selected media type, or {@code null} if none */ @Nullable protected MediaType selectMediaType(ServerWebExchange exchange, diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageWriterResultHandler.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageWriterResultHandler.java index 9e2c04af6d..188cb838e9 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageWriterResultHandler.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageWriterResultHandler.java @@ -110,14 +110,13 @@ public abstract class AbstractMessageWriterResultHandler extends HandlerResultHa * @return indicates completion or error * @since 5.0.2 */ - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({"unchecked", "rawtypes"}) protected Mono writeBody(@Nullable Object body, MethodParameter bodyParameter, @Nullable MethodParameter actualParam, ServerWebExchange exchange) { ResolvableType bodyType = ResolvableType.forMethodParameter(bodyParameter); ResolvableType actualType = (actualParam != null ? ResolvableType.forMethodParameter(actualParam) : bodyType); - Class bodyClass = bodyType.resolve(); - ReactiveAdapter adapter = getAdapterRegistry().getAdapter(bodyClass, body); + ReactiveAdapter adapter = getAdapterRegistry().getAdapter(bodyType.resolve(), body); Publisher publisher; ResolvableType elementType; @@ -128,11 +127,11 @@ public abstract class AbstractMessageWriterResultHandler extends HandlerResultHa } else { publisher = Mono.justOrEmpty(body); - elementType = ((bodyClass == null || bodyClass.equals(Object.class)) && body != null ? + elementType = (bodyType.toClass() == Object.class && body != null ? ResolvableType.forInstance(body) : bodyType); } - if (void.class == elementType.getRawClass() || Void.class == elementType.getRawClass()) { + if (elementType.resolve() == void.class || elementType.resolve() == Void.class) { return Mono.from((Publisher) publisher); } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/MatrixVariableMapMethodArgumentResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/MatrixVariableMapMethodArgumentResolver.java index 513ff6cdd8..eebea6944e 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/MatrixVariableMapMethodArgumentResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/MatrixVariableMapMethodArgumentResolver.java @@ -105,8 +105,7 @@ public class MatrixVariableMapMethodArgumentResolver extends HandlerMethodArgume if (!MultiValueMap.class.isAssignableFrom(parameter.getParameterType())) { ResolvableType[] genericTypes = ResolvableType.forMethodParameter(parameter).getGenerics(); if (genericTypes.length == 2) { - Class declaredClass = genericTypes[1].getRawClass(); - return (declaredClass == null || !List.class.isAssignableFrom(declaredClass)); + return !List.class.isAssignableFrom(genericTypes[1].toClass()); } } return false; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolver.java index 48c799f5dc..81a22ae439 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ModelAttributeMethodArgumentResolver.java @@ -158,9 +158,7 @@ public class ModelAttributeMethodArgumentResolver extends HandlerMethodArgumentR } if (attribute == null) { - Class attributeClass = attributeType.getRawClass(); - Assert.state(attributeClass != null, "No attribute class"); - return createAttribute(attributeName, attributeClass, context, exchange); + return createAttribute(attributeName, attributeType.toClass(), context, exchange); } ReactiveAdapter adapterFrom = getAdapterRegistry().getAdapter(null, attribute); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ModelInitializer.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ModelInitializer.java index 1831482baf..eb790118da 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ModelInitializer.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ModelInitializer.java @@ -120,7 +120,7 @@ class ModelInitializer { Object value = handlerResult.getReturnValue(); if (value != null) { ResolvableType type = handlerResult.getReturnType(); - ReactiveAdapter adapter = this.adapterRegistry.getAdapter(type.getRawClass(), value); + ReactiveAdapter adapter = this.adapterRegistry.getAdapter(type.resolve(), value); if (isAsyncVoidType(type, adapter)) { return Mono.from(adapter.toPublisher(value)); } @@ -131,7 +131,7 @@ class ModelInitializer { } private boolean isAsyncVoidType(ResolvableType type, @Nullable ReactiveAdapter adapter) { - return adapter != null && (adapter.isNoValue() || type.resolveGeneric() == Void.class); + return (adapter != null && (adapter.isNoValue() || type.resolveGeneric() == Void.class)); } private String getAttributeName(MethodParameter param) { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseEntityResultHandler.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseEntityResultHandler.java index 59b0b7d29b..268948fe63 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseEntityResultHandler.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseEntityResultHandler.java @@ -94,9 +94,9 @@ public class ResponseEntityResultHandler extends AbstractMessageWriterResultHand @Nullable private static Class resolveReturnValueType(HandlerResult result) { - Class valueType = result.getReturnType().getRawClass(); + Class valueType = result.getReturnType().toClass(); Object value = result.getReturnValue(); - if ((valueType == null || valueType.equals(Object.class)) && value != null) { + if (valueType == Object.class && value != null) { valueType = value.getClass(); } return valueType; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandler.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandler.java index 6e1222da6d..f39ea90d7c 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandler.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -151,7 +151,7 @@ public class ViewResolutionResultHandler extends HandlerResultHandlerSupport return true; } - Class type = result.getReturnType().getRawClass(); + Class type = result.getReturnType().toClass(); ReactiveAdapter adapter = getAdapter(result); if (adapter != null) { if (adapter.isNoValue()) { @@ -160,11 +160,10 @@ public class ViewResolutionResultHandler extends HandlerResultHandlerSupport type = result.getReturnType().getGeneric().toClass(); } - return (type != null && - (CharSequence.class.isAssignableFrom(type) || Rendering.class.isAssignableFrom(type) || - Model.class.isAssignableFrom(type) || Map.class.isAssignableFrom(type) || - void.class.equals(type) || View.class.isAssignableFrom(type) || - !BeanUtils.isSimpleProperty(type))); + return (CharSequence.class.isAssignableFrom(type) || Rendering.class.isAssignableFrom(type) || + Model.class.isAssignableFrom(type) || Map.class.isAssignableFrom(type) || + void.class.equals(type) || View.class.isAssignableFrom(type) || + !BeanUtils.isSimpleProperty(type)); } private boolean hasModelAnnotation(MethodParameter parameter) { @@ -204,12 +203,12 @@ public class ViewResolutionResultHandler extends HandlerResultHandlerSupport MethodParameter parameter = result.getReturnTypeSource(); Locale locale = LocaleContextHolder.getLocale(exchange.getLocaleContext()); - Class clazz = valueType.getRawClass(); - if (clazz == null) { + Class clazz = valueType.toClass(); + if (clazz == Object.class) { clazz = returnValue.getClass(); } - if (returnValue == NO_VALUE || Void.class.equals(clazz) || void.class.equals(clazz)) { + if (returnValue == NO_VALUE || clazz == void.class || clazz == Void.class) { viewsMono = resolveViews(getDefaultViewName(exchange), locale); } else if (CharSequence.class.isAssignableFrom(clazz) && !hasModelAnnotation(parameter)) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MatrixVariableMapMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MatrixVariableMapMethodArgumentResolver.java index 14819a2b40..dcebf58793 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MatrixVariableMapMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MatrixVariableMapMethodArgumentResolver.java @@ -101,8 +101,7 @@ public class MatrixVariableMapMethodArgumentResolver implements HandlerMethodArg if (!MultiValueMap.class.isAssignableFrom(parameter.getParameterType())) { ResolvableType[] genericTypes = ResolvableType.forMethodParameter(parameter).getGenerics(); if (genericTypes.length == 2) { - Class declaredClass = genericTypes[1].getRawClass(); - return (declaredClass == null || !List.class.isAssignableFrom(declaredClass)); + return !List.class.isAssignableFrom(genericTypes[1].toClass()); } } return false;