Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Dúvida no Ex. 4 da Aula 4 - Verbos HTTP e Convenção de nomes das URLs

Quando colocamos @Delete no método, que "method="???"" devemos usar no link?

Remover
6 respostas
solução!

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!