Может ли Spring MVC обрабатывать запросы из HTML-форм, отличных от POST и GET?
Spring 3 MVC поддерживает все 4 метода RESTful: GET, POST, PUT и DELETE. Но технологии посмотреть их формы? Если нет, то какова реальная польза на form:form
тег?
Я попытался использовать метод PUT в форме:
<form:form action="/myaction" method="PUT">
...
</form:form>
сгенерированный HTML был:
<form id="command" action="/myaction" method="post">
<input type="hidden" name="_method" value="PUT"/>
...
</form>
понятно, поскольку большинство браузеров не поддерживают другие методы кроме GET и POST. Но весна может справиться с этим с дополнительным input
с именем _method
и значение METHOD_NAME
. Не так ли?
когда я отправляю указанную форму методу контроллера с аннотацией
@RequestMapping(method=RequestMethod.PUT)
он утверждает, что метод запроса POST
не поддерживается. Но почему?--8-->, а не PUT
? Что на самом деле происходит под капюшонами?
1 ответов
использование "скрытого параметра" называется _method
не относится к библиотеке тегов Spring MVC, но также используется несколькими другими клиентскими фреймворками. Весна просто следует конвенции, какой бы она ни была.
чтобы использовать это правильно, вам нужно добавить фильтр к вашему web.xml
, (HiddenHttpMethodFilter
см. javadoc), которая превращает _method
параметр в" реальное " представление метода HTTP в HttpServletRequest
. Это сделано как фильтр для того чтобы подчеркнуть факт отсутствие PUT
и DELETE
является проблемой браузера-API сервлета поддерживает его просто отлично.
поэтому, если вы хотите использовать эти методы в своей форме, вам нужно добавить этот фильтр.
P. S. И почему вы получаете "пост не поддерживается" сообщение, что ваша форма использует POST
, и ваш обработчик аннотируется с PUT
, так что это не соответствует. Потому что у вас нет определенного фильтра, игнорируется.