Я пытаюсь удалить объект на странице с помощью ссылки удаления (ссылка) или кнопки удаления (форма).Я использую кнопку удаления, так как ссылка вызывает «GET» вместо «POST»
Это код JSP, предназначенный для этого:
<td><form:form method="DELETE" action="/client/invoices/${invoice.id}"><input type="submit" value="delete"></form:form></td>
В результате получается HTMLэто:
<td><form id="command" action="/client/invoices/9" method="post"><input type="hidden" name="_method" value="DELETE"/><input type="submit" value="delete"></form></td>
Итак, я очень счастлив.У него есть _method, который указывает, что это действие DELETE.Вот мой код контроллера:
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public String delete(@PathVariable("id") Long id, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, Model uiModel) {
invoiceServiceHibernate.removeInvoice(id);
return "redirect:/invoices";
}
Итак, этот метод не вызывается.У меня есть другой метод, который делает POST для создания счета-фактуры, и, нажав кнопку удаления, вместо этого создал счет-фактуру.Я предполагаю, что контроллер смотрит на сервлет как POST-запрос и использует первый метод, который обрабатывает POST-запрос, который в данном случае заключается в создании нового счета.
Я пытаюсь сделать этот «RESTful» таким образомЯ хочу, чтобы это было /invoice/id
и использовать POST, PUT, DELETE, GET
, но я не уверен, как кодировать это в контроллере, используя Spring MVC.
Я могу заставить это работать, добавляя "глаголы", такие как /invoices/id/delete
и устанавливая контроллер как
@RequestMapping(value = "/{id}/delete", method = RequestMethod.POST)
Обратите внимание, RequestMethod.POST, но так как значения картыявно имеет /id/delete
, он не использует POST по умолчанию, который сопоставлен с /invoices
и /invoices/id
.
Надеюсь, у меня все ясно.Если у кого-то есть какие-либо предложения или пример кода (настоятельно рекомендуется), я был бы признателен.Я прочитал эти ссылки SO для ссылок: Link1 Link2 Link3