Я использую Spring 3.0.4 и хочу перейти на Spring 4 (4.1.3 - это последняя версия). В настоящее время я использую классы, основанные на SimpleFormController
, поэтому мне нужно перейти на @Controller
. Я уже использовал это в приложении Spring Boot, но этот довольно старый.Миграция контроллеров на весну 4
К примеру, в моем 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» в моей контекст.Как добавить это снова?
Кроме того, мой контроллер получает сканирование компонентов, но когда я помещаю точку останова внутри метода onSubmit, он никогда не попадает. Что еще мне нужно сделать для миграции ?
Для viewResolver вы можете создать класс @Configuration и расширить WebMvcConfigurerAdapter. –
@MikeR Я не использую конфигурацию Java на данный момент. Полагаю, что я могу просто создать компонент в основном контексте приложения, а не в специальном конфиге сервлета. –