2010-02-25 15 views
13

que estoy haciendo la siguiente petición del cliente:¿Cómo hacer coincidir un Spring @RequestMapping con @pathVariable que contiene "/"?

/search/hello%2Fthere/

donde el término de búsqueda "hola/no" se ha urlencoded.

En el servidor que estoy tratando de igualar esta URL utilizando la siguiente asignación de solicitud:


@RequestMapping("/search/{searchTerm}/") 
public Map searchWithSearchTerm(@PathVariable String searchTerm) { 
// more code here 
} 

Pero estoy recibiendo el error 404 en el servidor, por lo no tienen ningún partido de la URL. Noté que la URL se decodifica antes de que Spring la obtenga. Por lo tanto, está tratando de hacer coincidir/buscar/hello/there que no tiene ninguna coincidencia.

Encontré un Jira relacionado con este problema aquí: http://jira.springframework.org/browse/SPR-6780. Pero todavía no sé cómo resolver mi problema.

¿Alguna idea?

Gracias

Respuesta

23

No hay buenas maneras de hacerlo (sin tratar con HttpServletResponse). Se puede hacer algo como esto:

@RequestMapping("/search/**") 
public Map searchWithSearchTerm(HttpServletRequest request) { 
    // Don't repeat a pattern 
    String pattern = (String) 
     request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); 

    String searchTerm = new AntPathMatcher().extractPathWithinPattern(pattern, 
     request.getServletPath()); 

    ... 
} 
+4

Para mí en lugar de request.getServletPath() trabajado request.getPathInfo() – ljader

+0

AntPathMatcher es seguro para subprocesos. Compartir una instancia está perfectamente bien. – Cemo

Cuestiones relacionadas