根据Spring MVC文档,标记执行以下操作:
- 配置Spring 3类型ConversionService(替代PropertyEditors)
- 添加了对使用@NumberFormat
格式化数字字段的支持- 如果Joda Time在类路径上,则添加对使用@DateTimeFormat格式化Date,Calendar和Joda Time字段的支持
- 如果JSR-303提供程序在类路径上,则添加对使用@Valid验证@Controller输入的支持
- 如果JAXB在类路径上(使用@RequestBody / @ ResponseBody进行HTTP消息转换),则支持读取和写入XML支持
- 如果杰克逊在类路径上(与#5一样),则添加对JSON读写的支持。
醇>
但是当我将它添加到我的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>
一切正常。可能有什么不对?任何帮助将不胜感激。
谢谢!
答案 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)