zoukankan      html  css  js  c++  java
  • SpringMVC之RequestMappingHandlerMapping

    <mvc:annotation-driven content-negotiation-manager="" enable-matrix-variables="true"></mvc:annotation-driven>

            RuntimeBeanReference contentNegotiationManager = getContentNegotiationManager(element, source, parserContext);
    
            RootBeanDefinition handlerMappingDef = new RootBeanDefinition(RequestMappingHandlerMapping.class);
            handlerMappingDef.setSource(source);
            handlerMappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
            handlerMappingDef.getPropertyValues().add("order", 0);
            handlerMappingDef.getPropertyValues().add("contentNegotiationManager", contentNegotiationManager);
    
            if (element.hasAttribute("enable-matrix-variables")) {
                Boolean enableMatrixVariables = Boolean.valueOf(element.getAttribute("enable-matrix-variables"));
                handlerMappingDef.getPropertyValues().add("removeSemicolonContent", !enableMatrixVariables);
            }
         //兼容之前版本
    else if (element.hasAttribute("enableMatrixVariables")) { Boolean enableMatrixVariables = Boolean.valueOf(element.getAttribute("enableMatrixVariables")); handlerMappingDef.getPropertyValues().add("removeSemicolonContent", !enableMatrixVariables); } configurePathMatchingProperties(handlerMappingDef, element, parserContext); readerContext.getRegistry().registerBeanDefinition(HANDLER_MAPPING_BEAN_NAME , handlerMappingDef); RuntimeBeanReference corsConfigurationsRef = MvcNamespaceUtils.registerCorsConfigurations(null, parserContext, source); handlerMappingDef.getPropertyValues().add("corsConfigurations", corsConfigurationsRef);
        private RuntimeBeanReference getContentNegotiationManager(Element element, Object source,
                ParserContext parserContext) {
    
            RuntimeBeanReference beanRef;
            if (element.hasAttribute("content-negotiation-manager")) {
                String name = element.getAttribute("content-negotiation-manager");
                beanRef = new RuntimeBeanReference(name);
            }
            else {
                RootBeanDefinition factoryBeanDef = new RootBeanDefinition(ContentNegotiationManagerFactoryBean.class);
                factoryBeanDef.setSource(source);
                factoryBeanDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
                factoryBeanDef.getPropertyValues().add("mediaTypes", getDefaultMediaTypes());
    
                String name = CONTENT_NEGOTIATION_MANAGER_BEAN_NAME;
                parserContext.getReaderContext().getRegistry().registerBeanDefinition(name , factoryBeanDef);
                parserContext.registerComponent(new BeanComponentDefinition(factoryBeanDef, name));
                beanRef = new RuntimeBeanReference(name);
            }
            return beanRef;
        }
        private Properties getDefaultMediaTypes() {
            Properties props = new Properties();
            if (romePresent) {
                props.put("atom", MediaType.APPLICATION_ATOM_XML_VALUE);
                props.put("rss", MediaType.APPLICATION_RSS_XML_VALUE);
            }
            if (jaxb2Present || jackson2XmlPresent) {
                props.put("xml", MediaType.APPLICATION_XML_VALUE);
            }
            if (jackson2Present || gsonPresent) {
                props.put("json", MediaType.APPLICATION_JSON_VALUE);
            }
            return props;
        }
        private void configurePathMatchingProperties(RootBeanDefinition handlerMappingDef, Element element,
                ParserContext parserContext) {
    
            Element pathMatchingElement = DomUtils.getChildElementByTagName(element, "path-matching");
            if (pathMatchingElement != null) {
                Object source = parserContext.extractSource(element);
                if (pathMatchingElement.hasAttribute("suffix-pattern")) {
                    Boolean useSuffixPatternMatch = Boolean.valueOf(pathMatchingElement.getAttribute("suffix-pattern"));
                    handlerMappingDef.getPropertyValues().add("useSuffixPatternMatch", useSuffixPatternMatch);
                }
                if (pathMatchingElement.hasAttribute("trailing-slash")) {
                    Boolean useTrailingSlashMatch = Boolean.valueOf(pathMatchingElement.getAttribute("trailing-slash"));
                    handlerMappingDef.getPropertyValues().add("useTrailingSlashMatch", useTrailingSlashMatch);
                }
                if (pathMatchingElement.hasAttribute("registered-suffixes-only")) {
                    Boolean useRegisteredSuffixPatternMatch = Boolean.valueOf(pathMatchingElement.getAttribute("registered-suffixes-only"));
                    handlerMappingDef.getPropertyValues().add("useRegisteredSuffixPatternMatch", useRegisteredSuffixPatternMatch);
                }
                RuntimeBeanReference pathHelperRef = null;
                if (pathMatchingElement.hasAttribute("path-helper")) {
                    pathHelperRef = new RuntimeBeanReference(pathMatchingElement.getAttribute("path-helper"));
                }
                pathHelperRef = MvcNamespaceUtils.registerUrlPathHelper(pathHelperRef, parserContext, source);
                handlerMappingDef.getPropertyValues().add("urlPathHelper", pathHelperRef);
    
                RuntimeBeanReference pathMatcherRef = null;
                if (pathMatchingElement.hasAttribute("path-matcher")) {
                    pathMatcherRef = new RuntimeBeanReference(pathMatchingElement.getAttribute("path-matcher"));
                }
                pathMatcherRef = MvcNamespaceUtils.registerPathMatcher(pathMatcherRef, parserContext, source);
                handlerMappingDef.getPropertyValues().add("pathMatcher", pathMatcherRef);
            }
        }
        public static RuntimeBeanReference registerCorsConfigurations(
                Map<String, CorsConfiguration> corsConfigurations, ParserContext parserContext, Object source) {
    
            if (!parserContext.getRegistry().containsBeanDefinition(CORS_CONFIGURATION_BEAN_NAME)) {
                RootBeanDefinition corsConfigurationsDef = new RootBeanDefinition(LinkedHashMap.class);
                corsConfigurationsDef.setSource(source);
                corsConfigurationsDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
                if (corsConfigurations != null) {
                    corsConfigurationsDef.getConstructorArgumentValues().addIndexedArgumentValue(0, corsConfigurations);
                }
                parserContext.getReaderContext().getRegistry().registerBeanDefinition(CORS_CONFIGURATION_BEAN_NAME, corsConfigurationsDef);
                parserContext.registerComponent(new BeanComponentDefinition(corsConfigurationsDef, CORS_CONFIGURATION_BEAN_NAME));
            }
            else if (corsConfigurations != null) {
                BeanDefinition corsConfigurationsDef = parserContext.getRegistry().getBeanDefinition(CORS_CONFIGURATION_BEAN_NAME);
                corsConfigurationsDef.getConstructorArgumentValues().addIndexedArgumentValue(0, corsConfigurations);
            }
            return new RuntimeBeanReference(CORS_CONFIGURATION_BEAN_NAME);
        }
  • 相关阅读:
    redis-LinkedList
    Jedis(java操作redis数据库技术)
    jquery判断表单内容是否为空
    jQuery单选框的回显
    使用jQuery重置(reset)表单的方法
    BootstrapValidator 解决多属性被同时校验问题
    模态框被遮罩层遮挡
    python 高阶函数
    python 函数式编程
    python 生成器
  • 原文地址:https://www.cnblogs.com/zby9527/p/8965563.html
Copyright © 2011-2022 走看看