2010-12-06 2 views
9

Spring 3 MVC unterstützt alle 4 RESTful-Methoden: GET, POST, PUT und DELETE. Aber unterstützt seine View-Technologie sie bei Formularen? Wenn nicht, was ist die tatsächliche Verwendung von method Attribut in form:form Tag?Kann Spring MVC Anfragen von anderen HTML-Formularen als POST und GET behandeln?

Ich versuchte PUT-Methode auf dem Formular zu verwenden:

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

generiert HTML war:

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

Es seit most browsers don't support other methods besides GET and POST klar. Aber Spring kann mit zusätzlichen input mit dem Namen _method und Wert METHOD_NAME umgehen. Macht es?

Wenn I angegebene Formular an einen Controller senden Methode mit

kommentierten
@RequestMapping(method=RequestMethod.PUT) 

sie behauptet, das Anforderungsverfahren POST nicht unterstützt wird. Aber warum POST und nicht PUT? Was passiert eigentlich unter den Motorhauben?

Antwort

16

Die Verwendung des "versteckten Parameters" _method ist nicht spezifisch für Spring MVCs Tag-Bibliothek, wird aber auch von einigen anderen Client-Frameworks verwendet. Der Frühling folgt nur der Konvention, so wie sie ist.

Um dies richtig zu nutzen, benötigen Sie einen Filter auf Ihre web.xml hinzuzufügen, (HiddenHttpMethodFilter finden javadoc), die die _method Parameter in eine „echte“ HTTP-Methode Darstellung in den HttpServletRequest dreht. Dies wird als ein Filter gemacht, um die Tatsache zu betonen, dass das Fehlen von PUT und DELETE ein Browser-Problem ist - die Servlet-API unterstützt es einfach gut.

Wenn Sie diese Methoden in Ihrem Formular verwenden möchten, müssen Sie diesen Filter hinzufügen.

P.S. Der Grund, warum Sie die Meldung "POST nicht unterstützt" erhalten, ist, dass Ihr Formular POST verwendet und Ihr Handler mit PUT versehen ist, damit er nicht übereinstimmt. Da Sie den Filter nicht definiert haben, wird der Parameter _method ignoriert.

Verwandte Themen