diff --git a/spring-web/src/main/java/org/springframework/web/method/support/AsyncHandlerMethodReturnValueHandler.java b/spring-web/src/main/java/org/springframework/web/method/support/AsyncHandlerMethodReturnValueHandler.java index cade24384d0..8d557bdf95d 100644 --- a/spring-web/src/main/java/org/springframework/web/method/support/AsyncHandlerMethodReturnValueHandler.java +++ b/spring-web/src/main/java/org/springframework/web/method/support/AsyncHandlerMethodReturnValueHandler.java @@ -19,20 +19,15 @@ package org.springframework.web.method.support; import org.springframework.core.MethodParameter; /** - * A {@link HandlerMethodReturnValueHandler} that handles return values that - * represent asynchronous computation. Such handlers need to be invoked with - * precedence over other handlers that might otherwise match the return value - * type: e.g. a method that returns a Promise type that is also annotated with - * {@code @ResponseBody}. + * A return value handler that supports async types. Such return value types + * need to be handled with priority so the async value can be "unwrapped". * - *
In {@link #handleReturnValue}, implementations of this class should create - * a {@link org.springframework.web.context.request.async.DeferredResult} or - * adapt to it and then invoke {@code WebAsyncManager} to start async processing. - * For example: - *
- * DeferredResult> deferredResult = (DeferredResult>) returnValue; - * WebAsyncUtils.getAsyncManager(webRequest).startDeferredResultProcessing(deferredResult, mavContainer); - *+ *
Note: implementing this contract is not required but it
+ * should be implemented when the handler needs to be prioritized ahead of others.
+ * For example custom (async) handlers, by default ordered after built-in
+ * handlers, should take precedence over {@code @ResponseBody} or
+ * {@code @ModelAttribute} handling, which should occur once the async value is
+ * ready.
*
* @author Rossen Stoyanchev
* @since 4.2
diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/DeferredResultAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/DeferredResultAdapter.java
index a743b09e410..96186e93c01 100644
--- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/DeferredResultAdapter.java
+++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/DeferredResultAdapter.java
@@ -23,7 +23,14 @@ import org.springframework.web.context.request.async.DeferredResult;
*
* @author Rossen Stoyanchev
* @since 4.3
+ *
+ * @deprecated in 4.3.8 since 5.0 adds first-class support for reactive type
+ * return values from Spring MVC controller methods based on the pluggable
+ * {@code ReactiveAdapterRegistry} mechanism. Yet another alternative would
+ * be to implement a custom
+ * {@link org.springframework.web.method.support.AsyncHandlerMethodReturnValueHandler}.
*/
+@Deprecated
public interface DeferredResultAdapter {
/**
diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/DeferredResultMethodReturnValueHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/DeferredResultMethodReturnValueHandler.java
index 906495956b8..b15ed95a8ae 100644
--- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/DeferredResultMethodReturnValueHandler.java
+++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/DeferredResultMethodReturnValueHandler.java
@@ -41,6 +41,7 @@ import org.springframework.web.method.support.ModelAndViewContainer;
* @author Rossen Stoyanchev
* @since 3.2
*/
+@SuppressWarnings("deprecation")
public class DeferredResultMethodReturnValueHandler implements AsyncHandlerMethodReturnValueHandler {
private final Map By default the map contains adapters for {@code DeferredResult}, which
* simply downcasts, {@link ListenableFuture}, and {@link CompletionStage}.
* @return the map of adapters
+ * @deprecated in 4.3.8, see comments on {@link DeferredResultAdapter}
*/
+ @Deprecated
public Map