2010-10-09 35 views
36

我正在開發一個使用spring mvc框架的web應用程序。我想同時註釋和基於beanName的url映射。處理程序異常沒有適配器

我有以下配置在我的上下文文件

基於
<mvc:annotation-driven /> 

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> 

我的註解控制器都工作正常,但beanNamed基於URL映射被拋出異常「無適配器處理程序」。

我在這裏做錯了什麼?

謝謝

回答

77

默認情況下,Spring MVC中定義了3個不同的請求處理程序適配器,他們是

org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter 
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter 

所以,你不必在你的背景文件來定義它們,但如果你至少定義您的上下文文件中有一個處理程序適配器,spring將不會創建默認適配器。

在您的配置中,您使用的是<mvc:annotation-driven />,根據this spring文檔,這將導致上下文同時定義DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapter。由於我們在上下文定義中創建了AnnotationMethodHandlerAdapter,因此spring不會創建其他兩個handlerAdapter。這就是爲什麼你會得到上述例外。

beanNameUrlMapping需要handlerAdapter SimpleControllerHandlerAdapter

要解決此異常,您可以簡單地在您的上下文中創建一個類型爲「SimpleControllerHandlerAdapter」的新bean。

<bean 
    class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"> 
</bean> 
+1

這是一個簡單的直接答案,很好的解釋:) – 2012-11-05 10:53:17

+1

這並不容易找到。但我最終做到了。優秀的解釋。我添加了註釋支持,並不想同時遷移所有控制器。 – panther 2013-09-24 12:16:30

+0

它通過添加SimpleControllerHandlerAdapter爲我工作正常。謝謝! – Ricardo 2014-06-09 20:31:32

1

當我試圖將spring MVC 2.5與spring web flow集成時,同樣的事情發生在我身上。對於webflow,我在配置文件中給了FlowHandlerdAdapter,但沒有給MVC。因此,如上所述,在這種情況下,我們需要定義一個類型爲simplecontrollerhandleradapter的BEAN,它將解決問題。