Estoy intentando eliminar una entidad en una página mediante un enlace de eliminación (a href) o un botón de eliminación (formulario). Estoy usando el botón eliminar desde un enlace llama a un "hacerse" en lugar de un "POST"programación del controlador Spring MVC y jsp para HttpDelete
Este es el código JSP, que tiene la intención de hacer eso:
<td><form:form method="DELETE" action="/client/invoices/${invoice.id}"><input type="submit" value="delete"></form:form></td>
el código HTML resultante es la siguiente:
<td><form id="command" action="/client/invoices/9" method="post"><input type="hidden" name="_method" value="DELETE"/><input type="submit" value="delete"></form></td>
Así que estoy bastante contento. Tiene _method que indica que es una acción DELETE. Aquí está mi código de controlador:
@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";
}
Entonces, lo que sucede es que este método no se llama. Tengo otro método que hace una POST para crear una factura y, al hacer clic en el botón Eliminar, se crea una factura. Supongo que el controlador mira el servlet como una solicitud POST y utiliza el primer método que maneja una solicitud POST que en este caso es crear una nueva factura.
Intento hacer esto "RESTful" así que quiero que sea /invoice/id
y usar POST, PUT, DELETE, GET
pero no estoy seguro de cómo codificar eso en el controlador usando Spring MVC.
soy capaz de conseguir que esto funcione añadiendo "verbos", como /invoices/id/delete
y configurar el controlador como
@RequestMapping(value = "/{id}/delete", method = RequestMethod.POST)
Nota, la RequestMethod.POST pero dado que los valores de mapa tienen explícitamente /id/delete
, lo hace no use la POST predeterminada que está mapeada a /invoices
y /invoices/id
.
Espero que esté claro. Si alguien tiene alguna sugerencia o código de muestra (fuertemente preferido), lo agradecería. He leído estos SO enlaces de referencias: Link1 Link2 Link3
Am frente al mismo problema. También he agregado el filtro. Pero hasta que el método de eliminación se convirtió en POST. ¿Puedes ayudarnos? – shalu