2010-12-06 13 views
9

Spring 3 MVCは、GET、POST、PUT、DELETEの4つのRESTfulメソッドをすべてサポートしています。しかし、そのビュー技術はフォームでそれらをサポートしていますか?そうでない場合はform:formタグのmethod属性の実際の使用は何ですか?Spring MVCはPOSTやGET以外のHTMLフォームからリクエストを処理できますか?

私は、フォーム上のPUTメソッドを使用してみました:HTML生成

<form:form action="/myaction" method="PUT"> 
    ... 
</form:form> 

されました:

<form id="command" action="/myaction" method="post"> 
    <input type="hidden" name="_method" value="PUT"/> 
    ... 
</form> 

それはmost browsers don't support other methods besides GET and POSTので、明らかです。しかし、Springは追加のinputという名前で_methodという名前と値METHOD_NAMEを扱うことができます。それは?

Iは

@RequestMapping(method=RequestMethod.PUT) 

それが主張で注釈コントローラメソッドに指定されたフォームを送信すると、そのリクエストメソッドPOSTがサポートされていません。しかし、なぜPOSTで、PUTではないのですか?実際にフードの下で何が起こるのですか?

答えて

16

_methodと呼ばれる「隠しパラメータ」の使用は、Spring MVCのタグライブラリに固有のものではありませんが、ほかのいくつかのクライアントフレームワークでも使用されています。春は大会のようなものです。

これを適切に使用するためには、あなたはHttpServletRequestで「本当の」HTTPメソッド表現に_methodパラメータをオンされ、(HiddenHttpMethodFilterjavadocを参照)、お使いのweb.xmlにフィルタを追加する必要があります。これは、PUTDELETEの欠如がブラウザの問題であるという事実を強調するフィルタとして行われます。サーブレットAPIはそれをうまくサポートします。

フォームでこれらのメソッドを使用する場合は、そのフィルタを追加する必要があります。

P.S. 「POSTがサポートされていません」というメッセージが表示されるのは、フォームでPOSTが使用され、ハンドラにPUTという注釈が付いているため、一致しません。フィルタが定義されていないため、_methodパラメータは無視されます。

関連する問題