2012-12-05 20 views
7

Dire che ho 2 Servizi Spring MVC:Spring MVC GET/reindirizzare/POST

@RequestMapping(value = "/firstMethod/{param}", method = RequestMethod.GET) 
public String firstMethod(@PathVariable String param) { 
    // ... 
    // somehow add a POST param 
    return "redirect:/secondMethod"; 
} 

@RequestMapping(value = "/secondMethod", method = RequestMethod.POST) 
public String secondMethod(@RequestParam String param) { 
    // ... 
    return "mypage"; 
} 

Potrebbe reindirizzare il primo metodo chiamata al metodo secondo (POST)? Utilizzare il secondo metodo come GET o utilizzare la sessione non è consigliabile.

Grazie per le vostre risposte!

+1

hai davvero bisogno di un reindirizzamento? perché non chiamare semplicemente 'this.secondMethod (param)' da 'firstMethod'? – Yevgeniy

+0

In questo esempio posso. Ma se 'secondMethod' ha molti parametri diversi come' @ CookieValue', sarebbe scomodo. – Nailgun

+0

@Yevgeniy La ragione principale per cui non posso semplicemente chiamare il metodo java è che voglio che l'utente abbia '/ secondMethod' nella barra degli indirizzi del browser. – Nailgun

risposta

1

Non è necessario reindirizzare un GET HTTP a un POST HTTP. HTTP GET e HTTP POST sono due cose diverse. Ci si aspetta che si comportino in modo molto diverso (GET è sicuro, idempotente e memorizzabile in cache. POST è idempotente). Per ulteriori informazioni, vedere ad esempio HTTP GET and POST semantics and limitations o http://www.w3schools.com/tags/ref_httpmethods.asp.

Quello che puoi fare è questo: annotare secondMethod anche con RequestMethod.GET. Quindi dovresti essere in grado di effettuare il reindirizzamento desiderato.

@RequestMapping(value = "/secondMethod", method = {RequestMethod.GET, RequestMethod.POST}) 
public String secondMethod(@RequestParam String param) { 
... 
} 

Ma attenzione che secondMethod può essere richiamato tramite richieste HTTP GET.

+0

Poiché la chiamata di un metodo POST n volte comporterà n numero di aggiornamenti, POST NON è idempotente. –