2012-04-09 8 views
8
@RequestMapping(value = {"/userDetails", "/userDetails/edit/{id}"}, method = RequestMethod.GET) 
public String userDetails(Map Model,****) { 
//what goes here? 
} 

Was werden meine Argumente für die userDetails Methode sein? Und wie unterscheide ich innerhalb der Methode /userDetails und /userDetails/edit/9?RequestMapping mit mehreren Werten mit pathvariable - Spring 3.0

+0

Duplizieren von [diese Frage] (http://stackoverflow.com/questions/2745471/spring-web-mvc-use-same-request-mapping-for- Anfrage-Parameter-und-Pfad-Variable) – nobeh

Antwort

15

Im Idealfall können wir pathvariable erhalten, indem Anmerkung @PathVariable in Methodenargument verwenden, aber hier haben Sie Reihe von URL verwendet {"/userDetails", "/userDetails/edit/{id}"} so wird dieser Fehler geben, während das Angebot Anfrage wie localhost:8080/domain_name/userDetails, in diesem Fall keine ID wird @PathVariable geliefert werden.

So können Sie den Unterschied zu bekommen (die Anfrage durch wird kommen) mit Argument HttpServletRequest Anfrage in Methode und verwenden diese Request-Objekt, wie unten -

String uri = request.getRequestURI();

-Code ist so -

@RequestMapping(value = {"/userDetails", "/userDetails/edit/{id}"}, method=RequestMethod.GET) 
    public String userDetails(Map Model,HttpServletRequest request) { 
    String uri = request.getRequestURI(); 
    //put the condition based on uri 
} 
+0

Ich benutze method = RequestMethod.GET und method = RequestMethod.POST separat. In diesem Fall werde ich HttpServletRequest nicht als Argument übergeben. Gibt es einen anderen Weg? –

+6

Warum trennen Sie diese beiden Anforderungsmappings nicht in zwei Methoden? Wenn Sie eine allgemeine Funktionalität implementieren möchten, können Sie diesen allgemeinen Code in eine separate private Methode einfügen und diese Methode entsprechend aufrufen. –

Verwandte Themen