欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Springboot中HandlerMethodArgumentResolver的作用是什么

Springboot中HandlerMethodArgumentResolver的作用是什么,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了硯山免費(fèi)建站歡迎大家使用!

RequestMappingHandlerAdapter,

      Springboot中HandlerMethodArgumentResolver的作用是什么

                                                               圖1

    HandlerMethodArgumentResolver是個(gè)接口,只有倆個(gè)方法,supportsParameter返回true標(biāo)示支持解析,之后調(diào)用resolveArgument將結(jié)果作為參數(shù)傳入,如下List-1所示。

    List-1

public interface HandlerMethodArgumentResolver {
    boolean supportsParameter(MethodParameter var1);

    @Nullable
    Object resolveArgument(MethodParameter var1, @Nullable ModelAndViewContainer var2, NativeWebRequest var3, @Nullable WebDataBinderFactory var4) throws Exception;
}

    RequestMappingHandlerAdapter中有個(gè)屬性argumentResolvers,是HandlerMethodArgumentResolverComposite,由類名稱可以看出使用了組合模式。RequestMappingHandlerAdapter的getDefaultArgumentResolvers,這些是默認(rèn)的參數(shù)處理器。

    List-2

private List<HandlerMethodArgumentResolver> getDefaultArgumentResolvers() {
    List<HandlerMethodArgumentResolver> resolvers = new ArrayList<HandlerMethodArgumentResolver>();

    // Annotation-based argument resolution
    resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(), false));
    resolvers.add(new RequestParamMapMethodArgumentResolver());
    resolvers.add(new PathVariableMethodArgumentResolver());
    resolvers.add(new PathVariableMapMethodArgumentResolver());
    resolvers.add(new MatrixVariableMethodArgumentResolver());
    resolvers.add(new MatrixVariableMapMethodArgumentResolver());
    resolvers.add(new ServletModelAttributeMethodProcessor(false));
    resolvers.add(new RequestResponseBodyMethodProcessor(getMessageConverters(), this.requestResponseBodyAdvice));
    resolvers.add(new RequestPartMethodArgumentResolver(getMessageConverters(), this.requestResponseBodyAdvice));
    resolvers.add(new RequestHeaderMethodArgumentResolver(getBeanFactory()));
    resolvers.add(new RequestHeaderMapMethodArgumentResolver());
    resolvers.add(new ServletCookieValueMethodArgumentResolver(getBeanFactory()));
    resolvers.add(new ExpressionValueMethodArgumentResolver(getBeanFactory()));
    resolvers.add(new SessionAttributeMethodArgumentResolver());
    resolvers.add(new RequestAttributeMethodArgumentResolver());

    // Type-based argument resolution
    resolvers.add(new ServletRequestMethodArgumentResolver());
    resolvers.add(new ServletResponseMethodArgumentResolver());
    resolvers.add(new HttpEntityMethodProcessor(getMessageConverters(), this.requestResponseBodyAdvice));
    resolvers.add(new RedirectAttributesMethodArgumentResolver());
    resolvers.add(new ModelMethodProcessor());
    resolvers.add(new MapMethodProcessor());
    resolvers.add(new ErrorsMethodArgumentResolver());
    resolvers.add(new SessionStatusMethodArgumentResolver());
    resolvers.add(new UriComponentsBuilderMethodArgumentResolver());

    // Custom arguments
    if (getCustomArgumentResolvers() != null) {
        resolvers.addAll(getCustomArgumentResolvers());
    }

    // Catch-all
    resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(), true));
    resolvers.add(new ServletModelAttributeMethodProcessor(true));

    return resolvers;
}

    如下圖2所示:

 Springboot中HandlerMethodArgumentResolver的作用是什么

                                                              圖2

    DispatcherServlet的doDispatch方法中,間接調(diào)用ServletInvocableHandlerMethod的invokeAndHandle方法,之后會(huì)逐個(gè)調(diào)用HandlerMethodArgumentResolver。所以我們自定義的HandlerMethodArgumentResolver在圖2中的步驟9和步驟10處處理。如下List-3所示,遍歷所有的參數(shù),對(duì)每個(gè)參數(shù)調(diào)用HandlerMethodArgumentResolverComposite的support和resolve方法,HandlerMethodArgumentResolverComposite再委托給各個(gè)HandlerMethodArgumentResolver處理。

    List-3

private Object[] getMethodArgumentValues(NativeWebRequest request, ModelAndViewContainer mavContainer,
        Object... providedArgs) throws Exception {

    MethodParameter[] parameters = getMethodParameters();
    Object[] args = new Object[parameters.length];
    for (int i = 0; i < parameters.length; i++) {
        MethodParameter parameter = parameters[i];
        parameter.initParameterNameDiscovery(this.parameterNameDiscoverer);
        args[i] = resolveProvidedArgument(parameter, providedArgs);
        if (args[i] != null) {
            continue;
        }
        if (this.argumentResolvers.supportsParameter(parameter)) {
            try {
                args[i] = this.argumentResolvers.resolveArgument(
                        parameter, mavContainer, request, this.dataBinderFactory);
                continue;
            }
            catch (Exception ex) {
                if (logger.isDebugEnabled()) {
                    logger.debug(getArgumentResolutionErrorMessage("Failed to resolve", i), ex);
                }
                throw ex;
            }
        }
        if (args[i] == null) {
            throw new IllegalStateException("Could not resolve method parameter at index " +
                    parameter.getParameterIndex() + " in " + parameter.getMethod().toGenericString() +
                    ": " + getArgumentResolutionErrorMessage("No suitable resolver for", i));
        }
    }
    return args;
}

    值得注意的是圖2中的步驟12,HandlerMethodReturnValueHandler可以改變controller返還的值。萬(wàn)一步驟7拋出異常,那么HandlerMethodReturnValueHandler的步驟就不會(huì)執(zhí)行,所以HandlerMethodReturnValueHandler處理不了業(yè)務(wù)代碼拋出異常的情況。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

分享文章:Springboot中HandlerMethodArgumentResolver的作用是什么
URL網(wǎng)址:http://aaarwkj.com/article40/gjodho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站關(guān)鍵詞優(yōu)化、動(dòng)態(tài)網(wǎng)站、Google、手機(jī)網(wǎng)站建設(shè)網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
欧美三级美国三级亚洲三级| 国产成人免费自拍一区| 激情毛片av在线免费看| 亚洲男人天堂在线播放| 亚州中文字幕久久一区| 中文字幕不卡一区在线| 一区二区亚洲国产精品| 国产黄片大秀在线观看| 九九久久精品久久久精品| 人妻丰满熟妇九九久久| 中文字幕免费不卡一区| 国产精品18禁一区二区三区| 精品国产一区二区三区大| 国产精品自偷自偷自偷| 午夜激情毛片在线观看| 久草免费人妻视频在线| 青青成线在人线免费啪| 97国产精品成人免费视频| 成人短篇在线视频夫妻刺激自拍| av天堂午夜在线观看| 日韩有码大片最新自拍| 亚洲欧洲日本在线天堂| 国产乱来视频在线观看| 亚洲精品福利一二三区| 色橹橹欧美午夜精品福利| 日韩人妻一区二区三区蜜桃视频密 | 国产午夜福利诱惑在线观看| 日韩成人午夜视频在线| 成人福利午夜一区二区| 91精品国产综合久久麻豆| 亚洲男人的天堂社区av| 亚洲第一女人天堂av| 久久精品久久久精品| 99久久精品国产国产毛片| 国产女主播在线观看视频| 亚洲国产99在线精品一区| 一本久道久久综合狠狠老| 国产午夜福利视频合集| 在线一区二区三区成人观看| 日日嗨av特一级黄淫片| 亚洲中文字幕少妇视频|