2011-09-29 8 views
11

Cuando correlao valores múltiples a @RequestMapping (como Multiple Spring @RequestMapping annotations), ¿puedo obtener el valor solicitado (URL)?Obtener el valor solicitado (URL) al usar las anotaciones @RequestMapping

De esta manera:

@RequestMapping(value={"/center", "/left"}, method=RequestMethod.GET) 
public String getCenter(Model model) throws Exception {  
    String requestedValue = getRequestedValue(); // I want this. 

    // I want to do something like this with requested value. 
    String result; 
    if (requestedValue.equals("center") 
     result = "center"; 
    else if (requestedValue.equals("left") 
     result = "left"; 
    return result; 
} 

Respuesta

4

Desde Spring 3.1.0, puede usar URI Template Patterns with Regular Expressions.

@RequestMapping(value={"/{path:[a-z-]+}"}, method=RequestMethod.GET) 
public String getCenter(@PathVariable String path) throws Exception {    
    // "path" is what I want 
} 
1

Uso RequestParam anotación. También puede agregar un parámetro de tipo HttpServletRequest a su método y luego obtener Parámetros de eso.

+0

Se costuras que significa Sangdol diferentes direcciones URL, no valores http. (Entonces su término "valores" es un poco confuso) – Ralph

17

Puede tener la Solicitud (HttpServletRequest) como parámetro del método del controlador. Entonces, puede inspeccionar la URL de solicitud para obtener el "valor".

@RequestMapping(value={"/center", "/left"}, method=RequestMethod.GET) 
public String getCenter(Model model, HttpServletRequest request) throws Exception {    
    String whatYouCallValue = request.getServletPath(); 
    .... 

Por cierto: cuando te entiendo rigth, que desea tener diferentes direcciones URL, no valores diferentes.

+0

Gracias, funciona. Lo llamé valores porque el nombre de la propiedad es valioso, pero ahora creo que podría ser confuso. Voy a corregir algunos. –

+0

Acepté mi respuesta porque parece más limpia. –

0

Además de los mejores @Hugh_Lee respuesta: Este método funcionará para todas las solicitudes que no se asignaron. Si desea utilizar este método solo para dos (o varios) casos solamente, p. "/ centro" y "/ izquierda", puede hacer lo siguiente. Cambie el nombre de "center" a "positionCenter", "left" a "positionLeft" (o agregue otra palabra común). Por lo que el código sería así:

@RequestMapping(value={"/{path:position+[A-Za-z-]+}"}, method=RequestMethod.GET) 
public String getCenter(@PathVariable String path) throws Exception {    
    // "path" is what I want 
} 
0

Después de expresiones regulares hará que su método sea ejecutado sólo para las direcciones URL y /center/left. Y puede obtener el valor con la anotación @PathVariable.

@GetMapping("/{path:^center$|^left$}") 
public ResponseEntity<?> whatIsThePath(@PathVariable String path){ 
    // path is either "center" or "left" 
} 
1

De Primavera 3.1.0, puede utilizar ServletUriComponentsBuilder

@RequestMapping(value={"/center", "/left"}, method=RequestMethod.GET) 
    public String getCenter(Model model) throws Exception {  
     UriComponentsBuilder builder = ServletUriComponentsBuilder.fromCurrentRequest(); 
     String requestedValue = builder.buildAndExpand().getPath(); // I want this. 
     System.out.println(requestedValue); 
     // I want to do something like this with requested value. 
     String result="fail"; 
     if (requestedValue.equals("center")) 
      result = "center"; 
     else if (requestedValue.equals("left")) 
      result = "left"; 
     return result; 
    } 
Cuestiones relacionadas