没有适配器处理程序异常

时间:2010-10-09 06:55:47

标签: spring spring-mvc

我正在使用spring mvc框架开发一个Web应用程序。我想同时使用注释和基于beanName的url映射。

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

<mvc:annotation-driven />

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

我的基于注释的控制器工作正常,但基于beanNamed的url映射抛出异常“没有适配器处理器”。

我在这里做错了什么?

谢谢

2 个答案:

答案 0 :(得分:79)

默认情况下,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不会创建另外两个handlerAdapters。这就是你得到上述例外的原因。

beanNameUrlMapping需要handlerAdapter SimpleControllerHandlerAdapter

要解决此异常,您只需在上下文中创建一个类型为“SimpleControllerHandlerAdapter”的新bean。

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

答案 1 :(得分:1)

当我尝试将弹簧MVC 2.5与弹簧卷流相结合时,同样的事情发生在我身上。对于webflow,我在配置文件中给出了FlowHandlerdAdapter,但没有为MVC提供。因此,如上所述,我们需要在这种情况下定义一个类型simplecontrollerhandleradapter的BEAN来解决这个问题。

相关问题