在applicationContext.xml </mvc:annotation-driven>中添加<mvc:annotation-driven>时出错

时间:2013-12-07 10:31:19

标签: java xml spring hibernate spring-mvc

根据Spring MVC文档,标记执行以下操作:

  
      
  1. 配置Spring 3类型ConversionService(替代PropertyEditors)
  2.   
  3. 添加了对使用@NumberFormat
  4. 格式化数字字段的支持   
  5. 如果Joda Time在类路径上,则添加对使用@DateTimeFormat格式化Date,Calendar和Joda Time字段的支持
  6.   
  7. 如果JSR-303提供程序在类路径上,则添加对使用@Valid验证@Controller输入的支持
  8.   
  9. 如果JAXB在类路径上(使用@RequestBody / @ ResponseBody进行HTTP消息转换),则支持读取和写入XML支持
  10.   
  11. 如果杰克逊在类路径上(与#5一样),则添加对JSON读写的支持。
  12.   

但是当我将它添加到我的applicationContext.xml文件时,在启动服务器(JBoss EAP 6.1)时会引发错误。

这是错误:

  

08:01:23,435 ERROR [org.springframework.web.context.ContextLoader](ServerService线程池 - 68)上下文初始化失败:org.springframework.beans.factory.BeanCreationException:创建名为'requestMappingHandlerMapping'的bean时出错在类路径资源中定义[org / springframework / web / servlet / config / annotation / DelegatingWebMvcConfiguration.class]:bean的实例化失败;嵌套异常是org.springframework.beans.factory.BeanDefinitionStoreException:工厂方法[public org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.requestMappingHandlerMapping()]抛出异常;嵌套异常是java.lang.ClassCastException:org.springframework.web.accept.ContentNegotiationManagerFactoryBean $$ EnhancerByCGLIB $$ 6af53d42无法强制转换为org.springframework.web.accept.ContentNegotiationManager

这是web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      version="3.0">

    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <session-config>
        <session-timeout>20</session-timeout>
    </session-config>
</web-app>

这是applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

    <mvc:annotation-driven />


    <context:component-scan base-package="br.gov.saude.ouvidor.apresentacao" />
    <context:component-scan base-package="br.gov.saude.ouvidor.apresentacao.controller  " />

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

这是pom.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <artifactId>xxx-xxxx</artifactId>
    <packaging>war</packaging>
    <name>xxx-xxxx</name>

    <properties>
        <project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
    </properties>

    <parent>
        <groupId>xxx.xxx.xxxxxxxx</groupId>
        <artifactId>xxxxxxx</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <optional>true</optional>           
        </dependency>
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <optional>true</optional>           
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.1.19</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.1.19</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.el</groupId>
            <artifactId>el-api</artifactId>
            <version>2.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <optimize>true</optimize>
                    <debug>true</debug>
                    <outputFileName>${project.artifactId}</outputFileName>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>              
                <configuration>             
                    <warName>${project.artifactId}</warName>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

删除标记<mvc:annotation-driven>一切正常。可能有什么不对?任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:3)

web.xml文件中,您指定将使用Java配置来设置MVC组件,但是尝试在applicationContext.xml文件中设置MVC组件。

ContextLoaderListener中的web.xml设置为启动/WEB-INF/applicationContext.xml配置文件。 applicationContext.xml的容器设置不应包含MVC组件,但应该用于在MVC范围之外注册bean,例如用于数据持久性的bean。

如果您真的想使用Java Configuration来设置Spring MVC组件,则必须将applicationContext.xml文件中建立的所有Spring MVC组件移动到使用@Configuration注释的Java类并转换XML bean在Java中的适当配置。

请参阅:Spring + Web MVC: dispatcher-servlet.xml vs. applicationContext.xml (plus shared security)