Как видно из названия, я пытаюсь и не могу получить следующую комбинацию, работающую в Spring 3.0:
- pre-Spring-3.0 контроллеры, сопоставленные с SimpleUrlHandlerMapping, и,
- Spring-3.0 @Controller, использующий MappingJacksonHttpMessageConverter и @ResponseBody для возврата JSON.
Все части работают - кроме случаев, когда они объединены!
Более подробно, у меня есть существующий Springвеб-приложение, которое включает в себя множество контроллеров pre-Spring-3.0.Они реализуют Контроллер и отображаются явно с помощью компонента SimpleUrlHandlerMapping.(Поэтому одно из решений - изменить их все на стиль @Controller).Это же веб-приложение (DispatcherServlet) также поддерживает несколько более новых контроллеров, помеченных @ Controller.
Моя конфигурация bean-компонента включает следующее, и все хорошо:
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/path/name.ext">mySpring25Controller</prop>
</props>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
</bean>
Теперь я добавляюДля нового контроллера, аннотированного @Controller и @RequestMapping, используйте MappingJacksonHttpMessageConverter, чтобы с помощью @ResponseBody некоторые из моих методов могли возвращать JSON через Джексона - вызовам Ajax.Опять все хорошо:
<!-- to generate JSON responses using Jackson (without using <mvc:annotation-driven/>) -->
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter"/>
</list>
</property>
</bean>
Проблема в том, что теперь мои явные отображения, определенные в бине SimpleUrlHandlerMapping, больше не работают:
[http-8081-Processor25] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/mayapp].[springapp] - Servlet.service() for servlet springapp threw exception
javax.servlet.ServletException: No adapter for handler [com.mycom.controller.mySpring25Controller ...]: Does your handler implement a supported interface like Controller?
at org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter(DispatcherServlet.java:985)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:773)
Эти отображения все еще появляются в моем журнале при запуске-up (SimpleUrlHandlerMapping - сопоставленный путь URL-адреса ... и т. д.), но, очевидно, теперь каким-то образом нарушены.
INFO org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/path/name.ext] onto handler [com.mycom.controller.mySpring25Controller ....]
Я начал с <mvc:annotation-driven/>
, у которого была та же проблема.Я попытался изменить порядок безуспешно, в том числе свойства заказа.И я также не нашел объяснения в документах Spring.Кажется, в авто-магии Spring есть какое-то взаимодействие, до которого я не дошёл.
Интересная проблема для кого-нибудь?Инсайт с благодарностью получен!