/*
 * Copyright 2002-2019 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.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.web.method.support;

import org.springframework.core.MethodParameter;
import org.springframework.lang.Nullable;

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".

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 @ResponseBody or @ModelAttribute handling, which should occur once the async value is ready. By contrast, built-in (async) handlers are already ordered ahead of sync handlers.

Author:Rossen Stoyanchev
Since:4.2
/** * 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". * * <p><strong>Note: </strong> 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. By contrast, built-in (async) handlers are already ordered ahead of * sync handlers. * * @author Rossen Stoyanchev * @since 4.2 */
public interface AsyncHandlerMethodReturnValueHandler extends HandlerMethodReturnValueHandler {
Whether the given return value represents asynchronous computation.
Params:
  • returnValue – the value returned from the handler method
  • returnType – the return type
Returns:true if the return value type represents an async value
/** * Whether the given return value represents asynchronous computation. * @param returnValue the value returned from the handler method * @param returnType the return type * @return {@code true} if the return value type represents an async value */
boolean isAsyncReturnValue(@Nullable Object returnValue, MethodParameter returnType); }