美文网首页
Spring mvc之HandlerMethodReturnVa

Spring mvc之HandlerMethodReturnVa

作者: engineer_tang | 来源:发表于2021-04-12 20:09 被阅读0次

    通过委托给已注册HandlerMethodReturnValueHandlers的列表来处理方法返回值。以前解析的返回类型被缓存以加快查找速度。
    类图如下:


    image.png

    该类实现了HandlerMethodReturnValueHandler接口,维护了一个List集合HandlerMethodReturnValueHandler类型的returnValueHandlers 容器,如下:

    private final List<HandlerMethodReturnValueHandler> returnValueHandlers = new ArrayList<>();
    

    1.2 handleReturnValue方法

    迭代注册的HandlerMethodReturnValueHandlers并调用支持它的Handlers。

    2. HandlerMethodReturnValueHandler接口

    3. AsyncHandlerMethodReturnValueHandler接口

    类图如下:


    image.png

    支持异步类型的返回值处理程序。这样的返回值类型需要优先处理,以便异步值可以“展开”。

    注意:不需要实现这个契约,但是当处理程序需要优先于其他处理程序时,应该实现这个契约。例如,自定义(异步)处理程序,默认情况下在内置处理程序之后排序,应该优先于 @ResponseBody o或@ModelAttribute 处理程序,这应该在异步值就绪后发生。相比之下,内置(异步)处理程序的顺序早于同步处理程序。
    接口定义如下:

    public interface AsyncHandlerMethodReturnValueHandler extends HandlerMethodReturnValueHandler {
    
        boolean isAsyncReturnValue(@Nullable Object returnValue, MethodParameter returnType);
    
    }
    

    继承自HandlerMethodReturnValueHandler 接口,新增加了isAsyncReturnValue方法。它用于对给定的返回值是否表示异步计算。

        private boolean isAsyncReturnValue(@Nullable Object value, MethodParameter returnType) {
            for (HandlerMethodReturnValueHandler handler : this.returnValueHandlers) {
                if (handler instanceof AsyncHandlerMethodReturnValueHandler &&
                        ((AsyncHandlerMethodReturnValueHandler) handler).isAsyncReturnValue(value, returnType)) {
                    return true;
                }
            }
            return false;
        }
    

    相关文章

      网友评论

          本文标题:Spring mvc之HandlerMethodReturnVa

          本文链接:https://www.haomeiwen.com/subject/gswahltx.html