2011-11-17 22 views
12

Uso nombres de archivos en mi API REST (ejemplo: GET http://xxx/api/myImage.jpg) problema es @PathVariable ".jpg". este problema ya se ha preguntado algunas veces aquí y ha respondido. pero no funcionó para mí¿Qué hace <mvc: annotation-driven /> do?

así que buscaron entonces encontrado en la

https://jira.springsource.org/browse/SPR-6524

" ... no se supone simplemente para ser combinado con casos DefaultAnnotationHandlerMapping manuales; este está diseñado como una o la otra elección en la actualidad, bastante similar para y ."

"el espacio de nombres mvc se hace configuraciones simplificadas".

¿La pregunta real es mvc qué hace? y cambiado?

encontré mi auto estas cosas ..

  1. configuración intercepter cambiado. (mvc namspace requerido en la configuración del frijol)
  2. useDefaultSuffixPattern no funciona.
  3. agrega el convertidor de mensajes JSON. Si la biblioteca está disponible Jackson
  4. argumentos @PathVariable son auto añade a modelar

Algún otro?

¡Gracias de antemano!

Respuesta

11

La etiqueta mvc:annotationDriven esencialmente establece su contexto de primavera para permitir el envío de solicitudes a los controladores.

La etiqueta configurará dos beans DefaultAnnotationHandlerMapping y AnnotationMethodHandlerAdapter.

Puede encontrar más información de los documentos de primavera:

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html

+3

Desde Spring 3.1, los beans configurados son RequestMappingHandlerMapping y RequestMappingHandlerAdapter –

+0

Esta respuesta no es del todo correcta. Los beans de asignación de controlador predeterminados 'BeanNameUrlHandlerMapping' y' DefaultAnnotationHandlerMapping' y los beans adaptadores de controlador predeterminados 'HttpRequestHandlerAdapter',' SimpleControllerHandlerAdapter' y 'AnnotationMethodHandlerAdapter' siempre se crean independientemente de si proporciona la etiqueta' mvc: annotationDriven' o no [Docs] (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/DispatcherServlet.html). –

5

Para habilitar la configuración de Java MVC añadir la anotación @EnableWebMvc a uno de sus @Configuration clases:

@Configuration 
@EnableWebMvc 
public class WebConfig { 

} 

Para lograr lo mismo en XML use el mvc: annotation-dr ada elemento en su contexto DispatcherServlet (o en su contexto raíz si no tiene contexto DispatcherServlet definido):

<?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> 

Los registros por encima de un RequestMappingHandlerMapping, un RequestMappingHandlerAdapter, y un ExceptionHandlerExceptionResolver (entre otros) en apoyo de las solicitudes de procesamiento con métodos de control anotados utilizando anotaciones como @RequestMapping, @ExceptionHandler y otras.

Para más detalles consulte el siguiente enlace:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-config

6

Antes de proporcionar ciertos puntos Permítanme aclarar la respuesta proporcionada por Roy no es exacta. No es necesario que proporcione la etiqueta mvc:annotation-driven para crear instancias de beans predeterminados. Esta etiqueta se puede utilizar Spring 3.0+ para permitir nueva característica introducida desde la primavera 3,0

(No lo utilice si quieres compatibilidad con versiones anteriores, especialmente si está utilizando clases basadas controlador viejos como MultiActionController, SimpleFormController)

Ahora deja para llegar a lo que realmente hace esta etiqueta -

Antes de la primavera granos de 3.1 por defecto utilizados en

  1. DefaultAnnotationHandlerMap de ping
  2. AnnotationMethodHandlerAdapter
  3. AnnotationMethodHandlerExceptionResolver

Estos están en desuso en la primavera de 3,1 y si se utiliza por encima de la etiqueta mencionado será reemplazado por -

  1. RequestMappingHandlerMapping
  2. RequestMappingHandlerAdapter
  3. ExceptionHandlerExceptionResolver

DefaultAnnotationHandlerMapping decidió qué controlador usar y AnnotationMethodHandlerAdapter seleccionó el método real que manejó la solicitud. RequestMappingHandlerMapping realiza ambas tareas. Por lo tanto, la solicitud se correlaciona directamente con el método.

Hay otros granos de infraestructura que se crean instancias por estas etiquetas (encadenado, además de los valores predeterminados) como - MappedInterceptor, ConfigurableWebBindingInitializer, SessionFlashManager, etc. ContentNegociationManager no voy a explicar estos :), ya que cada uno son respuestas largas por sí mismos, por lo que google para obtener más información.

PD: Y sí Spring 3.1+ expone automáticamente @PathVariables al modelo. También tiene la etiqueta mvc:interceptors. Pero creo que no está relacionado con <mvc:annotation-driven />. Recomiendo encarecidamente que lea - http://spring.io/blog/2009/12/21/mvc-simplifications-in-spring-3-0/

0

MVC: anotación impulsada etiqueta de hacer un trabajo extra a partir del contexto: el componente de exploración de etiquetas

La etiqueta registra el Handler Mapping y adaptador Handler requerido para enviar peticiones a su @Controllers:

etiqueta ayuda a registrar los siguientes componentes.

DefaultAnnotationHandlerMapping - Esta es una implementación de HandlerMapping que asigna las solicitudes HTTP a los métodos de controlador definidos mediante la anotación @RequestMapping.

AnnotationMethodHandlerAdapter - Es responsable de escanear los controladores para identificar métodos (y parámetros) anotados con anotaciones @MVC. Escanea y almacena en caché los métodos del controlador anotados con @RequestMapping. También maneja las anotaciones @RequestParam, @ModelAttribute, @SessionAttributes y @InitBinder.

ConfigurableWebBindingInitializer - El inicializador para la Carpeta de datos web. Ayuda en forma declarativa configuración de la carpeta web con validadores, servicios de conversión, los editores de propiedades, etc.

LocalValidatorFactoryBean - Implementa la interfaz validador y permite la validación JSR303. Esto se inyecta en ConfigurableWebBindingInitializer. FormattingConversionServiceFactoryBean: una fábrica de conversión que devuelve servicios de conversión para objetos básicos como la fecha y los números. Esta fábrica se inyecta nuevamente en ConfigurableWebBindingInitializer.

convertidores Mensaje
ByteArrayHttpMessageConverter - Un convertidor de mensajes de solicitud HTTP que lee un cuerpo del mensaje HTTP y devuelve un flujo de bytes. También puede leer un flujo de bytes y construir un cuerpo de respuesta. Se utiliza para recibir y enviar documentos como PDF, XLS, etc.
StringHttpMessageConverter - Un convertidor de mensajes de solicitud HTTP que lee un cuerpo de solicitud de texto plano y lo vincula a un objeto String. Y viceversa con respuesta.
FormHttpMessageConverter - Un convertidor de mensajes de solicitud HTTP que lee un cuerpo de solicitud codificado de formulario y lo vincula a un objeto de enlace de formulario.
SourceHttpMessageConverter - Un convertidor de solicitud HTTP que convierte un cuerpo de mensaje XML a/desde Objeto de enlace.

Si no usamos mvc: etiqueta accionada por anotación, entonces tenemos que registrar estos componentes manualmente en un archivo xml para poder usarlos, lo que resulta en mucho trabajo adicional.