【发布时间】:2014-12-23 18:23:39
【问题描述】:
我正在使用 Spring 3.0.4 并希望迁移到 Spring 4(4.1.3 是当前最新版本)。我目前正在使用基于SimpleFormController 的类,因此我必须迁移到使用@Controller。我已经在一个基于 Spring Boot 的应用程序中使用过这个,但是这个已经很老了。
例如在我的web.xml:
<servlet>
<servlet-name>exportServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/exportServlet-config.xml</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>exportServlet</servlet-name>
<url-pattern>/export/*</url-pattern>
</servlet-mapping>
在exportServlet-config.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- ========================= MVC CONFIG ========================= -->
<context:annotation-config/>
<bean id="viewResolver"
class="com.traficon.tmsng.server.web.mvc.ExportEventViewResolver">
<!-- where to find the XML data in the model map -->
<property name="sourceKey" value="src"/>
<!-- where XSLT files are stored -->
<property name="prefix" value="/WEB-INF/xsl/"/>
<!-- suffix of xsl file -->
<property name="suffix" value=".xsl"/>
<!-- all view names match -->
<property name="viewNames" value="*"/>
<property name="cacheTemplates" value="false"/>
<property name="viewClass"
value="com.traficon.tmsng.server.web.mvc.DefaultExportEventView"/>
</bean>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<value>
/eventhistory*.html=exportEventController
/eventhistory*.zip=exportEventController
/eventhistory*.xls=exportEventController
/integrateddatahistory*.html=exportIntegratedDataController
/integrateddatahistory*.xls=exportIntegratedDataController
/flowdatahistory*.html=exportFlowDataController
/flowdatahistory*.xls=exportFlowDataController
/presencedatahistory*.html=exportPresenceDataController
/presencedatahistory*.xls=exportPresenceDataController
/bicycledatahistory*.html=exportBicycleDataController
/bicycledatahistory*.xls=exportBicycleDataController
/logging*.html=exportLoggingController
</value>
</property>
</bean>
<!-- ========================= CONTROLLERS ========================= -->
<bean id="exportEventController" class="com.traficon.tmsng.server.web.mvc.ExportEventController">
<property name="commandClass"
value="com.traficon.tmsng.server.web.mvc.ExportEventControllerCommandBean"/>
<property name="supportedMethods" value="POST,GET"/>
<property name="cacheSeconds" value="86400"/>
</bean>
<bean class="com.traficon.tmsng.server.web.export.MessageExporterRunnable" scope="prototype"/>
</beans>
为了更新,我从 web.xml 中删除了这些内容并更新了 ExportEventController 类。我更新的类现在使用@Controller 注释(ExportMessageController 是一个抽象类,不再从 SimpleFormController 扩展:
@Controller
@RequestMapping("/export")
public class ExportEventController extends ExportMessageController<EventMessage, ExportEventControllerCommandBean>
{
// Need to allow GET because Air client converts POST into a GET
@RequestMapping(value = "/eventhistory*", method = {RequestMethod.GET, RequestMethod.POST})
public ModelAndView onSubmit( ExportEventControllerCommandBean cmd, HttpServletResponse response ) throws Exception
{
}
}
通过删除 web.xml 内容,我的上下文中也不再有“viewResolver”bean。如何重新添加?
此外,我的控制器被组件扫描拾取,但是当我在 onSubmit 方法中放置一个断点时,它永远不会被命中。我还需要为迁移做什么?
【问题讨论】:
-
对于 viewResolver,您可以创建一个 @Configuration 类并扩展 WebMvcConfigurerAdapter。
-
@MikeR 我目前没有使用 Java 配置。我想我可以在我的主应用程序上下文中创建 bean,而不是在专用的 servlet 配置中。
标签: java spring spring-mvc