Ответ 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>