2013-07-31 51 views
34

我使用彈簧mvc。當method = post時,我無法從url獲取參數。但是當我將方法更改爲GET時,我可以獲取所有參數。如何獲得param方法post spring mvc?

這是我的形式:

<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> 

這是我的控制器:

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

我怎樣才能解決呢?

+2

您如何在JSP中設置這些參數?你能展示更多的代碼嗎? – adarshr

回答

46
  1. 如果您刪除enctype="multipart/form-data",Spring註釋將正常工作。

    @RequestParam(value="txtEmail", required=false) 
    
  2. 您甚至可以從request對象的參數。

    request.getParameter(paramName); 
    
  3. 使用form的情況下,屬性的數量都很大。這將很方便。 Tutorial讓你開始。

  4. 如果您想要接收enctype="multipart/form-data",請配置多分解析器。

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

請參考Spring documentation

+0

我會建議使用一個表單來綁定參數,如果有多個參數。 Spring的'@ RequestParam'註解是一個方便的機制,它在整個代碼中的讀取要比request.getParameter好。但是'MultipartResolver'位爲+1。 – adarshr

+0

在使用form標籤的情況下,在html代碼中有沒有bean字段名稱? – gab06

8

如果更改內容類型

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

在控制器如下還要添加標頭值也適用:

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

當我想要得到的所有POST PARAMS我我正在使用下面的代碼,

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

我正在使用@RequestBody用於發佈/放入/刪除http請求的註釋,而不是讀取GET參數的@RequestParam

+0

謝謝,這就是我想要的...... !! –

4

你應該和方法= RequestMethod.GET

使用這些資源@RequestParam爲了POST參數,必須把他們的請求主體。像JSON或其他數據表示的機構將取決於您的實現(我的意思是,消費和生產MediaType)。

通常, multipart/form-data用於上傳文件。

相關問題