2013-05-17 29 views
8

Przede wszystkim, tutaj jest mój Controller:RequestMethod POST i GET w tym samym kontrolerze?

@RequestMapping(value = "/esta", method = RequestMethod.POST) 
public String handleRequest(HttpServletRequest request) { 

    Esta estaobject = new Esta(); 
    // To test, if the parameters are set 
    String user = request.getParameter("user"); 
    String name = request.getParameter("name"); 
    String shortname = request.getParameter("shortname"); 
    String was_admin_string = request.getParameter("was_admin"); 
    String sap_nr = request.getParameter("sap_nr"); 
    String etl_string = request.getParameter("etl"); 

    if (user != null && name != null && shortname != null && was_admin_string != null && sap_nr != null && etl_string != null) { 
     some code... 
    } 

    request.getSession().setAttribute("esta", estaobject); 

    return "esta"; 
} 

Kiedy odwiedzić witrynę, to skontaktować się z if -statement, jeśli istnieją pewne parametry.
Jeśli nie, to powinien wyświetlić mój formularz. Następnie, kiedy wypełniam formularz, wyślę go pod numer POST, a teraz są pewne parametry, które przechodzą przez oznaczenie if.

Mój problem: Kiedy odwiedzam witrynę po raz pierwszy, nie jest to POST - prośba, więc pojawia się komunikat o błędzie Request method 'GET' not supported.
Ale zmień formularz na GET - prośba nie jest dla mnie odpowiednia. Musi to być POST.

Czy istnieje zatem rozwiązanie umożliwiające obsługę tego samego kontrolera w żądaniach POST i GET?

Odpowiedz

19

Zrób to tablica wartości metody, która robi odwzorowanych, tak:

@RequestMapping(value = "/esta", method = {RequestMethod.POST, RequestMethod.GET}) 
+0

próbował go już, ale ja się zawsze ten sam błąd ... –

+1

Oooooooh, chłopcze. to żenujące ... Zapomniałem "wyczyścić instalację" mojej klasy. Teraz działa. Przepraszam ^^ '+ 1' dla poprawnej odpowiedzi: P –

+0

Haha, nie ma problemu. – CorayThan

2

Albo możesz pisać oddzielne metody

@RequestMapping(value = {#some_vale}, method = RequestMethod.GET) 
public random_method #1{ 
} 

@RequestMapping(value = { #some_value }, method = RequestMethod.POST) 
public random_method #2{ 
} 

teraz można wdrożyć swój do odwiedzenia określonej strony a drugi do wypełnienia formularza. Mam nadzieję, że to ci pomoże.

0

na wiosnę deweloper może korzystać zarówno RequestMethod.POST i RequestMethod.GET w samym kontrolerze tylko co tablicę metody tak:

@RequestMapping(value = "/esta", method = {RequestMethod.POST, RequestMethod.GET}) 
public String handleRequest(HttpServletRequest request) { 
//Implementation of your code. 
}