2013-07-31 10 views
34

Sto usando mvc a molla. E non posso ottenere parametri dall'URL quando method = post. Ma quando cambio metodo in GET, posso ottenere tutti i parametri.come ottenere param in method post spring mvc?

Questa è la mia 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> 

Questo è il mio controller:

@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(); 
} 

Come posso risolvere questo?

+2

Come si impostano questi parametri nel modulo nel JSP? Puoi mostrare un po 'di quel codice? – adarshr

risposta

46
  1. Le annotazioni di primavera funzioneranno correttamente se si rimuove enctype="multipart/form-data".

    @RequestParam(value="txtEmail", required=false) 
    
  2. È possibile anche ottenere i parametri dall'oggetto request.

    request.getParameter(paramName); 
    
  3. Utilizzare un form nel caso in cui il numero di attributi sono grandi. Sarà conveniente. Tutorial per iniziare.

  4. Configurare il resolver Multiparte se si desidera ricevere enctype="multipart/form-data".

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

sottoporre la Spring documentation.

+0

Si consiglia di utilizzare un modulo per associare i parametri se ce ne sono più di alcuni. L'annotazione '@ RequestParam' di Spring è un meccanismo di comodità che sicuramente legge meglio di fare' request.getParameter' su tutto il codice. Ma +1 per il bit 'MultipartResolver'. – adarshr

+0

In caso di utilizzo del tag form, non ha importanza avere i nomi dei campi bean nel codice html? – gab06

8

Funziona anche se si cambia il tipo di contenuto

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

Nel controllore anche aggiungere il valore di intestazione come segue:

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

Quando voglio ottenere tutti i POST params I sto usando il codice qui sotto,

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

Sto usando l'annotazione @RequestBody per le richieste HTTP post/put/delete anziché @RequestParam che legge i parametri GET.

+0

Grazie, questo è quello che volevo ... !! –

4

Si dovrebbe usare @RequestParam su tali risorse con metodo = RequestMethod.GET

Per poter pubblicare parametri, è necessario inviarli come il corpo della richiesta. Un corpo come JSON o un'altra rappresentazione dei dati dipenderebbe dalla tua implementazione (voglio dire, consumare e produrre MediaType).

In genere, multipart/form-data viene utilizzato per caricare i file.

Problemi correlati