2011-09-29 6 views
11

Quando si associano più valori a @RequestMapping (come Multiple Spring @RequestMapping annotations), è possibile ottenere il valore richiesto (URL)?Ottieni il valore richiesto (URL) quando si utilizzano le annotazioni @RequestMapping

Ti piace questa:

@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; 
} 

risposta

4

Dalla primavera 3.1.0, è possibile utilizzare 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

Usa RequestParam annotazione. Puoi anche aggiungere un parametro di tipo HttpServletRequest al tuo metodo e poi getParameters da quello.

+0

E cuciture che Sangdol significa URL diversi e non con quelli HTTP. (Quindi il suo termine "valori" è un po 'confuso) – Ralph

17

È possibile avere la richiesta (HttpServletRequest) come parametro del metodo del gestore. Quindi puoi quindi controllare l'URL della richiesta per ottenere il "valore".

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

Btw: quando ho capito rigth, si desidera avere URL diversi e non con quelli diversi.

+0

Grazie funziona. Ho chiamato valori perché il nome della proprietà è valore, ma ora penso che potrebbe essere fonte di confusione. Correggerò alcuni –

+0

Ho accettato la mia risposta, perché sembra più pulita. –

0

Oltre ai migliori @Hugh_Lee risposta: Questo metodo funziona per tutte le richieste non mappate. Se si desidera utilizzare questo metodo solo per due (o diversi) casi, ad es. "/ center" e "/ left", puoi seguire. Rinominare "center" in "positionCenter", "left" in "positionLeft" (o aggiungere un'altra parola comune). Quindi il codice sarebbe stato così:

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

seguente espressione regolare renderà il vostro metodo per essere eseguito solo per gli URL /center e /left. E puoi ottenere il valore con l'annotazione @PathVariable.

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

Dalla primavera 3.1.0, è possibile utilizzare 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; 
    } 
Problemi correlati