【问题标题】:Migrate Controllers to Spring 4将控制器迁移到 Spring 4
【发布时间】: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


【解决方案1】:

我设法通过保留我的exportServlet-config.xml 使其工作。我需要在其中添加&lt;mvc:annotation-driven/&gt;

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    相关资源
    最近更新 更多