Quando colocamos @Delete no método, que "method="???"" devemos usar no link?
Remover
Quando colocamos @Delete no método, que "method="???"" devemos usar no link?
Remover
Oi Jeronimo,
o HTML só dar suporte ao POST e GET, por isso se usa algo que se chama Tunneling.
Ai vc usa o método POST mas envia no formulário mais um parâmetro com o nome do método em questão, por exemplo:
<input type="hidden" name="http_method" value="DELETE" />
O servidor recebe o POST mas percebe que a intenção era um delete e chama o método com @Delete. Ok?
abs
Não entendi muito bem: 1) como passar no formulário um parâmetro com o nome do método? 2) Quando fizer o @Delete tem que ter o @Path explicito?
Oi Jeronimo, esqueci a formatação na minha primeira resposta e uma parte nao apareceu :(
Vou tentar dar um exemplo: tendo uma aplicação que gerenciar produtos e querendo apagar um produto com a id 3:
<form action="/gerenciamento-produto/produtos" method="POST">
<input type="hidden" name="id" value="3" />
<input type="hidden" name="http_method" value="DELETE" />
</form>
E vc não precisa do @Path explicito, apenas o @Path do seu controller:
@Path("/produtos")
public class ProdutoController {
@DELETE
public void remove(@QueryParam("id") Integer id) {
//apagando produto
}
}
Ok?
Abs
Eu fiquei com a mesma dúvida do Jeronimo:
no caso desse curso e exercício no remove só temos um link e nenhum form:
<td><a href="<c:url value="/produto/remove?produto.id=${produto.id }" />" >Remover</a></td>
como vai funcionar com @Delete(/produto/remove)?
Oi Marcio,
Não vai funcionar com um href
pois o navegador envia um GET
.
Quando o seu cliente é o navegador raramente vc usa @Delete
, mas se o cliente é uma outra aplicação (android ou outra aplicação web) ai sim pode ser utilizada uma requisição HTTP com o verbo DELETE.
Ok?
abs
Entendi!