Что делает <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 файле, чтобы использовать их, что приводит к слишком большому количеству дополнительных работ.