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