我正在使用spring mvc框架开发一个Web应用程序。我想同时使用注释和基于beanName的url映射。
我在上下文文件中有以下配置
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
我的基于注释的控制器工作正常,但基于beanNamed的url映射抛出异常“没有适配器处理器”。
我在这里做错了什么?
谢谢
答案 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文档,这将导致上下文定义DefaultAnnotationHandlerMapping
和AnnotationMethodHandlerAdapter
。由于我们在上下文定义中创建了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来解决这个问题。