Нет адаптера для обработчика в Spring MVC - PullRequest
4 голосов
/ 22 августа 2010

У меня проблема с простым Spring MVC-контроллером, написанным на scala:

@Controller
class HelloWorldController {

 implicit def sessionFactory2Session(sf: SessionFactory) = sf.getCurrentSes
 @Autowired
  var sessionFactory: SessionFactory = null

 @Transactional 
 @RequestMapping(value=Array("/hello.html"),method = Array(RequestMethod.GET,RequestMethod.POST))
 def showHello  = {

   val document = new CustomDocument("name","custom")
   sessionFactory.save(document)
   sessionFactory.flush

   "helloPage"
  }
}

Когда я пытался получить доступ к /hello.html, я получил исключение:

javax.servlet.ServletException: No adapter for handler: Does your handler implement a supported interface like Controller?
at org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter(DispatcherServlet.java:951)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:758)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:717)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)

Но когда я удалил@ Транзакционная аннотация - все работает !!Spring не может найти сопоставление запроса с двумя аннотациями?Мой фрагмент applicationContext.xml:

 <bean id="openSessionInViewInterceptor"
       class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
     <property name="sessionFactory" ref="sessionFactory"/>
 </bean>

 <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
     <property name="interceptors">
         <list><ref bean="openSessionInViewInterceptor"/></list>
     </property>
     <property name="alwaysUseFullPath" value="true" />
 </bean>
<context:component-scan base-package="scala.hibernate"/>

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass"
              value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
 </bean>

 <!-- for transaction -->
 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManaager">
      <property name="sessionFactory" ref="sessionFactory"/>
      <property name="dataSource" ref="dataSource"/>
 </bean>
 <tx:annotation-driven/>

EDIT

Транзакционный аспект применяется с использованием динамического прокси и не позволяет Spring MVC получать доступ к аннотациям @RequestMapping на целевом объекте.Решение класса:

    <tx:annotation-driven proxy-target-class="true"/>

Ответы [ 2 ]

0 голосов
/ 12 июня 2012

объявить следующий боб. это должно решить проблему

<bean id="simpleHandler" class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

обновит вас, когда выяснит причину ..

0 голосов
/ 23 августа 2010

Попробуйте добавить <context:annotation-config /> к вашему applicationContext.xml и посмотрите, решит ли это проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...