Может ли 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, так что это не соответствует. Потому что у вас нет определенного фильтра, игнорируется.