• springMvc配置拦截器无效


        说明

    springMvc配置国际化拦截器失败,点击页面按钮切换中英文无效,排查发现没有进入

    LocaleChangeInterceptor 类中,判断拦截器没有起作用,那么是什么原因导致拦截器无效,通过查看官网配置及查找其他码友分析,
    判断应该是annotation-driven 和 interceptors配置问题,调整两者顺序,果然解决问题,如下

             

    <!-- if you use annotation you must configure following setting,
        2.这块还能调整自定义跳转正常 3.配置自定义转换器 4. 配置validator-->
        <mvc:annotation-driven  conversion-service="conversionService" validator="validator" />
    
        <!--该拦截器通过名为”lang”的参数来拦截HTTP请求,使其重新设置页面的区域化信息,
        #####特别提醒,interceptors必须在annotation-driven之后 ######-->
        <mvc:interceptors>
            <!-- 该拦截器通过名为”locale”的参数来拦截HTTP请求,使其重新设置页面的区域化信息 【拦截所有请求】-->
            <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
            </bean>
        </mvc:interceptors>
    1. springMvc 版本  
      4.3.12.RELEASE
    2. springMvc 所用jar(参照别的码友的整理)
    IOC 
        core:资源访问,类型转换
        beans:bean工厂
        expression:${}获取属性
        context:核心接口ApplicationContext
    AOP 
        aop:面向切面编程的实现
        aspects:对AspectJ的整合
    DAO 
        jdbc:通过jdbc模板类访问数据库
        tx:事务的实现
        orm:与hibernate,mybatis的集成
        oxm:对象与xml数据之间的相互转换
        jms:系统之间发送消息,异步通信
    Web 
        web:与web项目的整合
        webmvc:子模块springMVC
    Test 
        test:测试

        3. 相关配置文件及依赖

          pom文件(除了上面的基础依赖之外的依赖jar包)

          

    <!--springMvc DispatcherServlet depend on -->
    
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.0.1</version>
                <scope>provided</scope>
            </dependency>
    
    
            <!-- utils -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.5</version>
            </dependency>
    
            <!-- 日志 logback -->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>0.9.28</version>
                <type>jar</type>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>0.9.28</version>
                <type>jar</type>
            </dependency>
    
            <dependency>
                <groupId>commons-configuration</groupId>
                <artifactId>commons-configuration</artifactId>
                <version>1.10</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.12</version>
                <scope>compile</scope>
            </dependency>
            <!--jsp依赖包-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
            <dependency>
                <groupId>taglibs</groupId>
                <artifactId>standard</artifactId>
                <version>1.1.2</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
            </dependency>
            <!--springMvc validation -->
            <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
            <dependency>
                <groupId>javax.validation</groupId>
                <artifactId>validation-api</artifactId>
                <version>2.0.1.FINAL</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>6.0.17.Final</version>
            </dependency>
    
            <!-- =================== BEGIN OF 后端传递集合数据到前端 =================== -->
            <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>2.11.2</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.11.2</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>2.11.2</version>
            </dependency>
            <!-- END OF 后端传递集合数据到前端 -->

       spring.xml

       

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
    
        <!-- 国际化资源文件 messageSource配置的是国际化资源文件的路径, classpath:messages指的是classpath路径下的
            messages_zh_CN.properties文件和messages_en_US.properties文件 设置“useCodeAsDefaultMessage”,默认为false
            ,这样当Spring在ResourceBundle中找不到messageKey的话,就抛出NoSuchMessageException,
            把它设置为True,则找不到不会抛出异常,而是使用messageKey作为返回值。
            ResourceBundleMessageSource 改为  -->
        <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
            <property name="defaultEncoding" value="UTF-8" />
            <property name="useCodeAsDefaultMessage" value="true" />
            <property name="basename" value="classpath:message/i18n" />
        </bean>
    
    
        <!-- 存储区域设置信息 SessionLocaleResolver类通过一个预定义会话名将区域化信息存储在会话中 从session判断用户语言defaultLocale
            :默认语言 -->
        <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
            <!-- 设置session attribute的key -->
            <property name="localeAttributeName" value="locale"/>
            <!-- 设置默认的Locale -->
            <property name="defaultLocale" value="zh_CN" />
        </bean>
    
    
    </beans>

     spring-mvc.mxl

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
                            http://www.springframework.org/schema/mvc
                            http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
        <!-- 允许对静态资源文件的访问 -->
        <mvc:default-servlet-handler />
        <!-- 扫描控制器类 -->
        <context:component-scan base-package="com.daisy" />
        <!-- if you use annotation you must configure following setting,
        2.这块还能调整自定义跳转正常 3.配置自定义转换器 4. 配置validator-->
        <mvc:annotation-driven  conversion-service="conversionService" validator="validator" />
    
        <!--该拦截器通过名为”lang”的参数来拦截HTTP请求,使其重新设置页面的区域化信息,
        #####特别提醒,interceptors必须在annotation-driven之后 ######-->
        <mvc:interceptors>
            <!-- 该拦截器通过名为”locale”的参数来拦截HTTP请求,使其重新设置页面的区域化信息 【拦截所有请求】-->
            <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
            </bean>
        </mvc:interceptors>
    
        <!--ConversionServiceFactoryBean:只能转换数据,FormattingConversionServiceFactoryBean:既能转换数据也能对数据进行格式化-->
        <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
            <property name="converters">
                <set><!--tip Class Name first Charactor Lowercase-->
                    <ref bean="myEmployeeConvert"/>
                </set>
            </property>
        </bean>
        <!--validation 验证数据是否合法 -->
        <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
            <property name="providerClass"  value="org.hibernate.validator.HibernateValidator"/>
            <!--不设置则默认为classpath下的 ValidationMessages.properties -->
            <property name="validationMessageSource" ref="messageSource"/>
        </bean>
    
        <!-- 定义跳转的文件的前后缀 -->
        <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
            <property name="viewResolvers">
                <list>
                    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
                    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                        <property name="prefix" value="/WEB-INF/jsp/"/>
                        <property name="suffix" value=".jsp"/>
                    </bean>
                </list>
            </property>
            <!--配置处理返回数据集合-->
            <property name="defaultViews">
                <list>
                    <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
                </list>
            </property>
        </bean>
    
    </beans>
  • 相关阅读:
    项目总结
    个人博客
    个人博客
    个人博客
    个人博客
    个人博客
    个人博客
    个人博客
    个人博客
    浅谈Vue与swiper轮播图框架结合小案例
  • 原文地址:https://www.cnblogs.com/qianna-daisy/p/13738978.html
Copyright © 2020-2023  润新知