2013-07-31 12 views
34

Używam sprężyny mvc. I nie mogę uzyskać parametru z adresu URL, gdy method = post. Ale kiedy zmienię metodę na GET, więc mogę uzyskać wszystkie parametry.jak uzyskać param w metodzie post wiosny mvc?

To moja forma:

<form method="POST" action="http://localhost:8080/cms/customer/create_customer" id="frmRegister" name ="frmRegister" enctype="multipart/form-data"> 
    <input class ="iptRegister" type="text" id="txtEmail" name="txtEmail" value="" /> 
    <input class ="iptRegister" type="password" id="txtPassword" name="txtPassword" value="" /> 
    <input class ="iptRegister" type="text" id="txtPhone" name="txtPhone" value="" /> 

    <input type="button" id="btnRegister" name="btnRegister" value="Register" onclick="" style="cursor:pointer"/> 
</form> 

To jest mój kontroler:

@RequestMapping(value= "/create_customer", method = RequestMethod.POST) 
@ResponseBody 
public String createCustomer(HttpServletRequest request, 
     @RequestParam(value="txtEmail", required=false) String email, 
     @RequestParam(value="txtPassword", required=false) String password, 
     @RequestParam(value="txtPhone", required=false) String phone){ 

    ResultDTO<String> rs = new ResultDTO<String>(); 
    rs.setStatus(IConfig.SHOW_RESULT_SUCCESS_ON_MAIN_SCREEN); 
    try{ 
     Customer c = new Customer(); 
     c.setEmail(email); 
     c.setPassword(password); 
     c.setPhone(phone); 
     customerService.insert(c); 
     rs.setData("Insert success"); 
    }catch(Exception ex){ 
     log.error(ex); 
     rs.setStatus(IConfig.SHOW_RESULT_ERROR_ON_MAIN_SCREEN); 
     rs.setData("Insert failure"); 
    } 
    return rs.toString(); 
} 

Jak mogę rozwiązać ten?

+2

W jaki sposób ustawiasz te parametry w formularzu na stronie JSP? Czy możesz pokazać więcej tego kodu? – adarshr

Odpowiedz

46
  1. Adnotacje wiosenne będą działać poprawnie po usunięciu enctype="multipart/form-data".

    @RequestParam(value="txtEmail", required=false) 
    
  2. Można nawet uzyskać parametry z obiektu request.

    request.getParameter(paramName); 
    
  3. Użyj form w przypadku, gdy liczba atrybutów są duże. Będzie to wygodne. Tutorial, aby zacząć.

  4. Skonfiguruj wieloczęściowy przelicznik, jeśli chcesz odebrać enctype="multipart/form-data".

    <bean id="multipartResolver" 
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
        <property name="maxUploadSize" value="250000"/> 
    </bean> 
    

Skierować Spring documentation.

+0

Polecam użycie formularza do wiązania parametrów, jeśli jest ich więcej niż kilka. Wiosenna adnotacja '@ RequestParam' jest wygodnym mechanizmem, który zdecydowanie lepiej brzmi niż wykonanie' request.getParameter' w całym kodzie. Ale +1 dla bitu 'MultipartResolver'. – adarshr

+0

W przypadku korzystania z tagu formularza nie ma znaczenia, czy nazwy pól fasoli są w kodzie HTML? – gab06

8

Działa również jeśli typ zawartości

<form method="POST" 
    action="http://localhost:8080/cms/customer/create_customer" 
    id="frmRegister" name="frmRegister" 
    enctype="application/x-www-form-urlencoded"> 

zmienić w sterowniku również dodać wartość nagłówka następująco:

@RequestMapping(value = "/create_customer", method = RequestMethod.POST, headers = "Content-Type=application/x-www-form-urlencoded") 
7

Kiedy chcę uzyskać wszystkie POST params I używam poniższego kodu,

@RequestMapping(value = "/", method = RequestMethod.POST) 
public ViewForResponseClass update(@RequestBody AClass anObject) { 
    // Source.. 
} 

Używam Adnotacje do post/put/delete http zamiast @RequestParam, który odczytuje parametry GET.

+0

Dzięki, właśnie tego chciałem ... !! –

4

Należy użyć @RequestParam na tych zasobów metodą = RequestMethod.GET

Aby dodawać parametry, należy wysłać je jako organ żądania. Ciało takie jak JSON lub inna reprezentacja danych zależałaby od twojej implementacji (mam na myśli, konsumuj i produkuj MediaType).

Zwykle do przesyłania plików używany jest wielostronicowy/formularz danych .

Powiązane problemy