2012-12-05 6 views
7

Dire que j'ai 2 services Spring MVC:Spring MVC GET/redirect/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"; 
} 

pourrait réinjecter le premier appel de méthode à la seconde méthode (POST)? L'utilisation de la seconde méthode en tant que GET ou en utilisant une session n'est pas souhaitable.

Merci pour vos réponses!

+1

Avez-vous vraiment besoin d'une redirection? pourquoi ne pas simplement appeler 'this.secondMethod (param)' de 'firstMethod'? – Yevgeniy

+0

Dans cet exemple, je peux. Mais si 'secondMethod' a de nombreux paramètres différents tels que' @ CookieValue', cela ne serait pas pratique. – Nailgun

+0

@Yevgeniy La principale raison pour laquelle je ne peux pas simplement appeler la méthode java est que je veux que l'utilisateur ait '/ secondMethod' dans la barre d'adresse du navigateur. – Nailgun

Répondre

1

Vous ne devez pas rediriger un HTTP GET vers un POST HTTP. HTTP GET et HTTP POST sont deux choses différentes. Ils sont censés se comporter très différemment (GET est sûr, idempotent et cacheable. POST est idempotent). Pour plus d'informations, voir par exemple HTTP GET and POST semantics and limitations ou http://www.w3schools.com/tags/ref_httpmethods.asp.

Ce que vous pouvez faire est ceci: annoter secondMethod aussi avec RequestMethod.GET. Ensuite, vous devriez être en mesure de faire la redirection souhaitée. Mais n'oubliez pas que secondMethod peut être appelé via des requêtes HTTP GET.

+0

Puisque l'appel d'une méthode POST n fois se traduira par n nombre de mises à jour, POST n'est PAS idempotent. –