2010-10-09 3 views
36

Я разрабатываю веб-приложение с использованием Spring mvc framework. Я хочу, чтобы сопоставления url и аннотации и beanName.Отсутствие адаптера для исключения обработчика

Я следующие конфигурации в моем файле контекст

<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 

Так что вам не нужно иметь, чтобы определить их в файле контекста, но если вы определить, по крайней мере, один адаптер адаптера в ваших файлах контекста, весна не будет создавать адаптеры по умолчанию.

В вашей настройке программы вы используете <mvc:annotation-driven />, согласно this яровой документации это приведет контекст, чтобы определить как DefaultAnnotationHandlerMapping и AnnotationMethodHandlerAdapter. Поскольку мы создаем AnnotationMethodHandlerAdapter, в нашем контексте определение Spring не создаст двух других handlerAdapters. Вот почему вы получаете указанное исключение.

BeanNameUrlMapping нужен handlerAdapter SimpleControllerHandlerAdapter.

Чтобы устранить это исключение, вы можете просто создать новый компонент типа «SimpleControllerHandlerAdapter» в вашем контексте.

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

Это простой ответ, отличное объяснение :) –

+1

Это было нелегко найти. Но в конце концов. Отличное объяснение. Я добавлял поддержку аннотаций и не хотел одновременно переносить все контроллеры. – panther

+0

Это сработало для меня, добавив SimpleControllerHandlerAdapter. Благодаря! – Ricardo

1

То же самое произошло со мной, когда я пытался интегрировать пружину MVC 2.5 с потоком весеннего полотна. Для webflow я дал FlowHandlerdAdapter в файле конфигурации, но ни один из них для MVC. Таким образом, как сказано выше, в этом случае нам необходимо определить BEAN типа simplecontrollerhandleradapter, который решит проблему.

Смежные вопросы