2012-12-05 14 views
7

Say I 2 Spring MVC Dienste haben: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"; 
} 

konnte die erste Methode Aufruf zweite (POST) Methode umleiten? Verwenden der zweiten Methode als GET oder Verwenden der Sitzung ist unerwünscht.

Vielen Dank für Ihre Antworten!

+1

brauchen Sie wirklich eine Umleitung? warum nicht einfach 'this.secondMethod (param)' von 'firstMethod' aufrufen? – Yevgeniy

+0

In diesem Beispiel kann ich. Aber wenn 'secondMethod' viele verschiedene Parameter wie' @ CookieValue' hat, wäre das unpraktisch. – Nailgun

+0

@Yevgeniy Der Hauptgrund, warum ich nicht nur die Java-Methode aufrufen kann, ist, dass ich möchte, dass der Benutzer '/ secondMethod' in der Browser-Adressleiste hat. – Nailgun

Antwort

1

Sie sollten ein HTTP GET nicht zu einem HTTP POST umleiten. HTTP GET und HTTP POST sind zwei verschiedene Dinge. Von ihnen wird erwartet, dass sie sich sehr unterschiedlich verhalten (GET ist sicher, idempotent und cachefähig. POST ist idempotent). Für mehr sehen Sie zum Beispiel HTTP GET and POST semantics and limitations oder http://www.w3schools.com/tags/ref_httpmethods.asp.

Was Sie tun können, ist dies: Annotate secondMethod auch mit RequestMethod.GET. Dann sollten Sie die gewünschte Weiterleitung vornehmen können.

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

Beachten Sie jedoch, dass secondMethod dann über HTTP GET-Anfragen aufgerufen werden kann.

+0

Da Aufruf einer POST-Methode n-mal in n Anzahl von Updates führt, ist POST NICHT idempotent. –