2010-09-26 5 views
14

En el controlador, tengo este código, de alguna manera, quiero obtener la búsqueda de valor de búsqueda "búsqueda". ¿Cómo es posible?¿Cómo obtengo el valor de mapeo de solicitud en el controlador?

@RequestMapping("/search/")  
public Map searchWithSearchTerm(@RequestParam("name") String name) {  
     // more code here  
} 
+0

Podría extenderse en su caso de uso por favor? Estoy tratando de averiguar qué está tratando de obtener aquí, porque tener búsqueda no parece útil sino para registrar o usar la ruta completa, en cuyo caso puede obtener la ruta de la solicitud como se indica en el kit – walnutmon

Respuesta

15

Una forma es obtenerlo de la ruta servlet.

@RequestMapping("/search/")  
public Map searchWithSearchTerm(@RequestParam("name") String name, HttpServletRequest request) {  
String mapping = request.getServletPath(); 
     // more code here  
} 
1
@RequestMapping("foo/bar/blub")  
public Map searchWithSearchTerm(@RequestParam("name") String name, HttpServletRequest request) { 
    // delivers the path without context root 
    // mapping = "/foo/bar/blub" 
    String mapping = request.getPathInfo(); 
    // more code here 
} 
17

Si desea que el patrón, puede intentar HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE:

@RequestMapping({"/search/{subpath}/other", "/find/other/{subpath}"}) 
public Map searchWithSearchTerm(@PathVariable("subpath") String subpath, 
              @RequestParam("name") String name) { 

    String pattern = (String) request.getAttribute(
           HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); 
    // pattern will be either "/search/{subpath}/other" or 
    // "/find/other/{subpath}", depending on the url requested 
    System.out.println("Pattern matched: "+pattern); 

} 
7

que tiene un controlador como

@Controller 
@RequestMapping(value = "/web/objet") 
public class TestController { 

    @RequestMapping(value = "/save") 
    public String save(...) { 
     .... 
    } 
} 

¡no puedes conseguir la requestMapping base de control utilizando la reflexión

// Controller requestMapping 
String controllerMapping = this.getClass().getAnnotation(RequestMapping.class).value()[0]; 

o el método requestMapping (desde el interior de un método) con la reflexión demasiado

//Method requestMapping 
String methodMapping = new Object(){}.getClass().getEnclosingMethod().getAnnotation(RequestMapping.class).value()[0]; 

Obviamente funciona con un único valor en requestMapping.

Espero que esto ayude.

+0

esto es útil cuando se usa un controlador base abstracto con lógica interna que necesita el mapeo de solicitud de las clases heredadoras, controladoras –

+0

RequestMapping no? http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html – vzamanillo

0

para la primavera y el 3.1 anterior se puede utilizar ServletUriComponentsBuilder

@RequestMapping("/search/")  
    public ResponseEntity<?> searchWithSearchTerm(@RequestParam("name") String name) { 
     UriComponentsBuilder builder = ServletUriComponentsBuilder.fromCurrentRequest(); 
     System.out.println(builder.buildAndExpand().getPath()); 
     return new ResponseEntity<String>("OK", HttpStatus.OK); 
    } 
Cuestiones relacionadas