2013-07-31 1 views
34

私はspring mvcを使用しています。そして、メソッド=投稿時にurlからparamを取得できません。しかし、メソッドをGETに変更すると、すべてのパラメータを取得できます。メソッドポスト春mvcでparamを取得する方法?

これは私のフォームです:

<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"を削除すると、春のアノテーションが正常に機能します。

    @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

フォームタグを使用する場合は、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 GETパラメータを読み取る@RequestParamではなく、POST/put/delete http要求の注釈です。

+0

ありがとう、これは私が望んだことです... !! –

4

あなたがリクエストボディとしてそれらを送信する必要があり、パラメータを投稿するためには方法= RequestMethod.GET

でこれらのリソースに@RequestParamを使用する必要があります。 JSONや他のデータ表現のような本体は、あなたの実装に依存します(つまり、MediaTypeを消費して生成します)。

通常、ファイルをアップロードするには、 multipart/form-dataが使用されます。

関連する問題