Подтвердить что ты не робот

Нет адаптера для исключения обработчика

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

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

<mvc:annotation-driven />

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

Мои контроллеры, основанные на аннотациях, работают нормально, но beanNamed-based url mapping выбрасывает исключение "Нет адаптера для обработчика".

Что я здесь делаю неправильно?

Спасибо

4b9b3361

Ответ 1

По умолчанию 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 />, в соответствии с этой spring документацией это заставит контекст определить как DefaultAnnotationHandlerMapping и AnnotationMethodHandlerAdapter. Поскольку мы создаем AnnotationMethodHandlerAdapter, в нашем контексте определение spring не создаст двух других handlerAdapters. Вот почему вы получаете указанное исключение.

Для beanNameUrlMapping нужен handlerAdapter SimpleControllerHandlerAdapter.

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

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

Ответ 2

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