2012-12-05 11 views
7

Say mam 2 usługi Wiosna MVC:Wiosna MVC GET/przekierowanie/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"; 
} 

można przekierować pierwsze wywołanie metody do drugiej metody (POST)? Używanie drugiej metody jako GET lub używanie sesji jest niepożądane.

Dzięki za odpowiedzi!

+1

czy naprawdę potrzebujesz przekierowania? dlaczego nie wystarczy wywołać 'this.secondMethod (param)' z 'firstMethod'? – Yevgeniy

+0

W tym przykładzie mogę. Ale jeśli 'secondMethod' ma wiele różnych parametrów, takich jak' @ CookieValue', byłoby to niewygodne. – Nailgun

+0

@Yevgeniy Głównym powodem, dla którego nie mogę po prostu wywołać metody Java, jest to, że chcę, aby użytkownik miał '/ secondMethod' w pasku adresu przeglądarki. – Nailgun

Odpowiedz

1

Nie powinieneś przekierowywać połączenia HTTP GET do HTTP POST. HTTP GET i HTTP POST to dwie różne rzeczy. Oczekuje się, że będą zachowywać się w różny sposób (GET jest bezpieczny, idempotentowy i buforowany). POST jest idempotentem). Więcej informacji można znaleźć na przykład: HTTP GET and POST semantics and limitations lub http://www.w3schools.com/tags/ref_httpmethods.asp.

Co możesz zrobić, to: opisuj secondMethod także za pomocą RequestMethod.GET. Wtedy powinieneś być w stanie dokonać pożądanego przekierowania.

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

Należy jednak pamiętać, że metoda secondMethod może zostać wywołana za pomocą żądań HTTP GET.

+0

Ponieważ wywołanie metody POST n razy spowoduje n liczby aktualizacji, POST nie jest idempotent. –