Что делает <mvc: annotation-driven/">?
Я использую имена файлов в моем REST API (пример: GET http://xxx/api/myImage.jpg)
проблема @PathVariable упала ".jpg".
эти проблемы уже задавали несколько раз здесь и отвечали. но не работал со мной.
поэтому я искал, затем нашел в
https://jira.springsource.org/browse/SPR-6524
"... просто не предполагается сочетать с ручными экземплярами DefaultAnnotationHandlerMapping, которые в настоящее время разработаны как либо либо - либо выбор, очень похожий на и."
"пространство имен mvc упрощает конфигурацию".
Реальный вопрос - mvc, что делать? и изменилось?
Я сам нашел себе это.
- изменена конфигурация межсетевого экрана. (mvc namspace требуется в конфигурации bean)
- useDefaultSuffixPattern не работает.
- добавляет конвертер сообщений JSON. если доступна библиотека джексона.
- аргументы @PathVariable автоматически добавляются в модель
Любые другие?
Спасибо заранее!
Ответы
Ответ 1
Тег mvc:annotationDriven
по существу устанавливает для вас ваш контекст Spring, позволяющий отправлять запросы контроллерам.
Тег настроит два beans DefaultAnnotationHandlerMapping и AnnotationMethodHandlerAdapter.
Дополнительную информацию вы можете найти в документах Spring:
http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html
Ответ 2
Прежде чем я предоставил определенные пункты, позвольте мне прояснить ответ, предоставленный Роем, не является точным. Вам не нужно указывать тег mvc:annotation-driven
для создания экземпляра по умолчанию beans. Этот тег можно использовать Spring 3.0+
для включения новой функции из Spring 3.0
(Не используйте его, если требуется обратная совместимость, особенно если вы используете старые классы на основе контроллера, такие как MultiActionController
, SimpleFormController
)
Теперь давайте посмотрим, что на самом деле делает этот тег -
До Spring 3.1 по умолчанию beans, где
- DefaultAnnotationHandlerMapping
- AnnotationMethodHandlerAdapter
- AnnotationMethodHandlerExceptionResolver
Они устарели в Spring 3.1, и если вы используете вышеупомянутый тег, он будет заменен на <
- RequestMappingHandlerMapping
- RequestMappingHandlerAdapter
- ExceptionHandlerExceptionResolver
DefaultAnnotationHandlerMapping решил, какой контроллер использовать, а AnnotationMethodHandlerAdapter выбрал фактический метод обработки запроса. RequestMappingHandlerMapping выполняет обе задачи. Поэтому запрос непосредственно сопоставляется с методом.
Есть и другая инфраструктура beans, которые создаются с помощью этих тегов (, прикрепленных в дополнение к значениям по умолчанию), например - MappedInterceptor
, ConfigurableWebBindingInitializer
, SessionFlashManager
, ContentNegociationManager
и т.д. я я не собираюсь объяснять это:), поскольку каждый из них долго отвечает самим, поэтому google для получения дополнительной информации.
PS: И да Spring 3.1+ автоматически выставляет @PathVariables для модели. Также у вас есть тег mvc:interceptors
. Но я думаю, что это не связано с <mvc:annotation-driven />
. Я бы очень рекомендовал прочитать - http://spring.io/blog/2009/12/21/mvc-simplifications-in-spring-3-0/
Ответ 3
Чтобы включить конфигурацию Java MVC, добавьте аннотацию @EnableWebMvc в один из классов @Configuration:
@Configuration
@EnableWebMvc
public class WebConfig {
}
Чтобы добиться того же в XML, используйте
<Сильного > MVC: аннотация привода
элемент в контексте DispatcherServlet (или в корневом контексте, если у вас нет контекста DispatcherServlet):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:annotation-driven/>
</beans>
Вышеуказанные регистры RequestMappingHandlerMapping, RequestMappingHandlerAdapter и ExceptionHandlerExceptionResolver (среди прочих) поддерживают запросы обработки с помощью методов аннотированных контроллеров, используя аннотации, такие как @RequestMapping, @ExceptionHandler и другие.
Подробнее см. ссылку ниже:
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-config
Ответ 4
mvc: тег с привязкой к аннотации делает дополнительную работу из контекста: тег компонентного сканирования
Тег регистрирует привязку сопоставления обработчика и адаптера, необходимые для отправки запросов вашим @Controllers:
Тег помогает регистрировать следующие компоненты.
DefaultAnnotationHandlerMapping. Это реализация HandlerMapping, которая отображает HTTP-запросы на методы обработчика, определенные с помощью аннотации @RequestMapping.
AnnotationMethodHandlerAdapter. Он отвечает за сканирование контроллеров для определения методов (и параметров), аннотированных аннотациями @MVC. Он сканирует и обрабатывает методы обработчиков, аннотированные с помощью @RequestMapping. Также обрабатывает аннотации @RequestParam, @ModelAttribute, @SessionAttributes и @InitBinder.
ConfigurableWebBindingInitializer. Инициализатор для связывания веб-данных. Помогает в декларативной настройке Web Binder с помощью валидаторов, служб преобразования, редакторов свойств и т.д.
LocalValidatorFactoryBean - реализует интерфейс валидатора и включает проверку JSR303. Это вводится в ConfigurableWebBindingInitializer.
FormattingConversionServiceFactoryBean - преобразование factory, которое возвращает услуги преобразования для основных объектов, таких как дата и числа. Этот factory снова вводится в ConfigurableWebBindingInitializer.
Преобразователи сообщений
ByteArrayHttpMessageConverter. Конвертер сообщений HTTP-запроса, который читает тело сообщения HTTP и возвращает поток байтов. Он также может читать поток байтов и строить тело ответа. Используется для приема и отправки документов, таких как PDF, XLS и т.д.
StringHttpMessageConverter. Конвертер сообщений HTTP-запроса, который читает тело запроса обычного текста и связывает его с объектом String. И наоборот с ответом.
FormHttpMessageConverter. Конвертер сообщений HTTP-запроса, который читает тело запроса, закодированного в форме, и связывает его с объектом Binding.
SourceHttpMessageConverter - конвертер запросов HTTP, который преобразует тело сообщения XML в/из объекта привязки.
Если мы не используем тег mvc: annotation, тогда мы должны вручную зарегистрировать эти компоненты вручную в XML файле, чтобы использовать их, что приводит к слишком большому количеству дополнительных работ.