2012-01-25 17 views
8

Tengo un controlador con asignación de solicitud como @RequestMapping("/**") ¿Qué significa?anotación @RequestMapping en Spring MVC

Si deseo excluir cierto patrón de URL del mapeo anterior, ¿cómo lo haré?

¿Podría alguien aclarar algo al respecto?

+0

También por favor me ilumine sobre cómo los patrones de URL de trabajo con @RequestMapping. Gracias. –

Respuesta

7

Su URL interceptará todas las solicitudes que coincidan con '/ **'. Dependiendo de dónde esté definiendo esto, no estoy seguro de por qué querría hacer esto. En el nivel de clase, esto debería definir la ruta de base, mientras que en el nivel de método, debe refinarse a la función específica.

Si desea excluir un patrón se podría definir otro controlador que se ordena con una prioridad mayor a la controladora especificando '/ **'

Éstos son 2 buenas referencias de manantial:

  1. http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html

  2. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html

+1

Cuál es la diferencia entre/** y/*. Yo pensaría que/* también cubrirá/** ¿Estoy en lo correcto? –

+1

Es todo lo contrario. Google "patrón de estilo de hormiga" o algo similar ... –

14

Pude lograr la "exclusión de URL" o "no coincidir con la URL" mediante el uso de la construcción Regex de "búsqueda negativa".

Quiero que mi controlador maneje todo lo que no sean recursos estáticos, es decir, CSS/Images/JS y páginas de error.

Para evitar que handeling de páginas de error, es decir, resourceNotFound tendrá que

  1. Editar el web.xml/web-app/error en la página para prefijar la url de error con/error/
  2. Editar la WEB-INF/spring/webmvc-config.xml/beans/mvc: view-controller/@ path handel sus nuevas asignaciones
  3. Editar el WEB-INF/spring/webmvc-config.xml/beans/bean [@ class = ** SimpleMappingExceptionResolver] para asignar todas las excepciones al error/...

En su controlador utiliza el siguiente

@Controller 
@RequestMapping(value = { "/" }) 
public class CmsFrontendController { 

    @RequestMapping(value = { "/" }, headers = "Accept=text/html") 
    public String index(Model ui) { 
     return addMenu(ui, "/"); 
    } 

    @RequestMapping(value = { "{path:(?!resources|error).*$}", "{path:(?!resources|error).*$}/**" }, headers = "Accept=text/html") 
    public String index(Model ui, @PathVariable(value = "path")String path) { 
     try { 
      path = (String) request.getAttribute(
        HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); 
      return addMenu(ui, path); 
     } catch (Exception e) { 
      log.error("Failed to render the page. {}", StackTraceUtil.getStackTrace(e)); 
      return "error/general"; 
     } 
    } 
} 
+1

¿DEBE haber una solución más fácil de mantener que esta ...? Hombre. – roufamatic

+0

¡Impresionante, muchas gracias @concept! – Gilead

+0

Muchas gracias @conept !!! –

Cuestiones relacionadas