Those things springmvc controller parameter analysis method of

How spring mvc is processed inside the parameters of the controller method? 

@EnableWebMvc have to start from this comment. 

Mvc start this container, this will naturally be loaded WebMvcConfigurationSupport configuration class that thing too much to do, see the following code

 

@Bean
public RequestMappingHandlerAdapter requestMappingHandlerAdapter(
        @Qualifier("mvcContentNegotiationManager") ContentNegotiationManager contentNegotiationManager,
        @Qualifier("mvcConversionService") FormattingConversionService conversionService,
        @Qualifier("mvcValidator") Validator validator) {

    RequestMappingHandlerAdapter adapter = createRequestMappingHandlerAdapter();
    adapter.setContentNegotiationManager(contentNegotiationManager);
    // configuration message converter 
    adapter.setMessageConverters (getMessageConverters ());
    adapter.setWebBindingInitializer(getConfigurableWebBindingInitializer(conversionService, validator));
    // Configure custom parameter parser 
    adapter.setCustomArgumentResolvers (getArgumentResolvers ());
     // configure the return value processor 
    adapter.setCustomReturnValueHandlers (getReturnValueHandlers ());

    if (jackson2Present) {
        adapter.setRequestBodyAdvice(Collections.singletonList(new JsonViewRequestBodyAdvice()));
        adapter.setResponseBodyAdvice(Collections.singletonList(new JsonViewResponseBodyAdvice()));
    }

    AsyncSupportConfigurer configurer = new AsyncSupportConfigurer();
    configureAsyncSupport (set);
    if (configurer.getTaskExecutor() != null) {
        adapter.setTaskExecutor (configurer.getTaskExecutor ());
    }
    if (configurer.getTimeout() != null) {
        adapter.setAsyncRequestTimeout(configurer.getTimeout());
    }
    adapter.setCallableInterceptors (configurer.getCallableInterceptors ());
    adapter.setDeferredResultInterceptors (configurer.getDeferredResultInterceptors ());

    return adapter;
}

 

There are a very important segment of code, as follows:

@Bean
public RequestMappingHandlerMapping requestMappingHandlerMapping(
        @Qualifier("mvcContentNegotiationManager") ContentNegotiationManager contentNegotiationManager,
        @Qualifier("mvcConversionService") FormattingConversionService conversionService,
        @Qualifier("mvcResourceUrlProvider") ResourceUrlProvider resourceUrlProvider) {

    RequestMappingHandlerMapping mapping = createRequestMappingHandlerMapping();
    mapping.setOrder(0);
    mapping.setInterceptors(getInterceptors(conversionService, resourceUrlProvider));
    mapping.setContentNegotiationManager(contentNegotiationManager);
    mapping.setCorsConfigurations(getCorsConfigurations());

    PathMatchConfigurer configure = getPathMatchConfigurer ();

    Boolean useSuffixPatternMatch = configurer.isUseSuffixPatternMatch();
    if (useSuffixPatternMatch != null) {
        mapping.setUseSuffixPatternMatch(useSuffixPatternMatch);
    }
    Boolean useRegisteredSuffixPatternMatch = configurer.isUseRegisteredSuffixPatternMatch();
    if (useRegisteredSuffixPatternMatch != null) {
        mapping.setUseRegisteredSuffixPatternMatch(useRegisteredSuffixPatternMatch);
    }
    Boolean useTrailingSlashMatch = configurer.isUseTrailingSlashMatch();
    if (useTrailingSlashMatch != null) {
        mapping.setUseTrailingSlashMatch(useTrailingSlashMatch);
    }

    UrlPathHelper path helper = configurer.getUrlPathHelper ();
    if (path helper! = null ) {
        mapping.setUrlPathHelper(pathHelper);
    }
    PathMatcher pathMatcher = configurer.getPathMatcher ();
    if (pathMatcher! = null ) {
        mapping.setPathMatcher (pathMatcher);
    }
    Map<String, Predicate<Class<?>>> pathPrefixes = configurer.getPathPrefixes();
    if (pathPrefixes != null) {
        mapping.setPathPrefixes(pathPrefixes);
    }

    return mapping;
}

To be continued. . . .

Guess you like

Origin www.cnblogs.com/z-qinfeng/p/12227343.html