, программирование контроллера Spring MVC и jsp для HttpDelete

Я пытаюсь удалить объект на странице с помощью ссылки удаления (href) или кнопку удаления (форма). Я использую кнопку удаления, так как ссылка требует "GET" вместо "POST"

Это код JSP, который намеревается сделать это:


В результате получается следующий HTML:

Итак, я ' м очень доволен. У него есть _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

6
задан Community 23 May 2017 в 10:30
поделиться