У меня есть существующие приложения Spring MVC, написанные на 2.5.
Я хотел использовать новый контроллер аннотаций. Я в некоторой степени вижу, что он действительно гибкий и отвечает моим другим потребностям.
Моя проблема в том, что я не могу смешать их обоих.
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:component-scan base-package="com.test.web" /> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <!-- Controller Mappings Here --> <bean id="homeController" class="com.test.web.HomeController"> <property name="cacheSeconds" value="120" /> </bean> //other plain old spring mvc controller
Когда я запускаю свое приложение и попадаю на домашнюю страницу, я получаю ошибку ниже:
javax.servlet.ServletException: нет адаптера для обработчика [com.test.web.HomeController@cca07b]: реализует ли ваш обработчик поддерживаемый интерфейс, такой как Controller?
Я не уверен, но думаю, что что-то противоречит. Это довольно большие приложения Spring MVC, и я не хочу менять те модули, которые уже работали с использованием старого Spring Base Controller.
Моя цель - использовать контроллер аннотаций только для моего нового улучшения.
Вам не нужно объявлять DefaultAnnotationHandlerMapping и AnnotationMethodHandlerAdapter.В контексте они зарегистрированы по умолчанию вместе с адаптерами для контроллеров старого стиля.
DefaultAnnotationHandlerMapping
AnnotationMethodHandlerAdapter
Когда вы объявляете их в явном виде, как это, стандартные значения удаляются, и контекст будет поддерживать только те, которые вы объявите.