Skip to content

Latest commit

 

History

History
129 lines (66 loc) · 10 KB

File metadata and controls

129 lines (66 loc) · 10 KB

Projeto 02 - Blog Pessoal - Classe PostagemController - Método Deletar

O que veremos por aqui:

  1. Criar o Método delete(Long id) para excluir uma Postagem no Banco de Dados

1. O Recurso Postagem

Nas etapas anteriores, construímos a Classe PostagemController e implementamos os Métodos:

  • getAll() 🡪 Retorna todos os Objetos da Classe Postagem.

  • getById(Long id) 🡪 Retorna um Objeto específico da Classe Postagem persistidos no Banco de dados. A Postagem é identificada pelo Atributo id.

  • getByTitulo(String titulo) 🡪 Retorna todos os Objetos da Classe Postagem persistidos no Banco de dados, cujo Atributo titulo contenha a String enviada no parâmetro titulo do Método.

  • Método post(Postagem postagem) 🡪 Persiste (salva) um novo Objeto da Classe Postagem no Banco de dados

  • Método put(Postagem postagem) 🡪 Atualiza um Objeto da Classe Postagem persistido no Banco de dados.

Vamos finalizar a construção da Classe Controladora com o Método delete(Long id).


👣 Passo 01 - Criar o Método delete(Long id)

Vamos implementar o Método delete(Long id) na Classe Postagem Controller. Traçando um paralelo com o MySQL, seria o equivalente a instrução: DELETE FROM tb_postagens WHERE id = id;.

Linha 65: A anotação @ResponseStatus indica que o Método delete(Long id), terá um Status HTTP específico quando a Requisição for bem sucedida, ou seja, será retornado o HTTP Status NO_CONTENT 🡪 204, ao invés do HTTP Status OK 🡪 200 como resposta padrão do Método.

Linha 66: A anotação @DeleteMapping("/{id}") mapeia todas as Requisições HTTP DELETE, enviadas para um endereço específico (Endpoint), dentro do Recurso Postagem, para um Método específico que responderá as requisições, ou seja, ele indica que o Método delete( Long id ), responderá a todas as requisições do tipo HTTP DELETE, enviadas no endereço http://localhost:8080/postagens/id, onde id é uma Variável de Caminho (Path Variable), que receberá o id da Postagem que será Deletada.

Linha 67: O Método delete(@PathVariable Long id) foi definido com o tipo void, porque ao deletar um Objeto da Classe Postagem do Banco de dados, ela deixa de existir, logo não existe um Objeto para ser Retornado. Como configuramos a anotação @ResponseStatus com um HTTP Status específico, O Método delete vai apenas inserir na Resposta da Requisição o HTTP Status NO_CONTENT 🡪 204, indicando que o Objeto deletado foi apagado e o seu conteúdo não existe mais. Observe que o Método possui um parâmetro do tipo Long, chamado id.

@PathVariable Long id: Esta anotação insere o valor enviado no endereço do endpoint, na Variável de Caminho {id}, no parâmetro do Método delete( Long id );


Exemplo:

http://localhost:8080/postagens/1

No exemplo acima, o parâmetro Long id, do Método delete( Long id ), receberá o valor 1 (Id que será procurado na tabela tb_postagens)

ATENÇÃO: Por questões de boas práticas e legibilidade do código, a Variável de Caminho e o Parâmetro do Método delete devem possuir o mesmo nome.

Linha 68: Optional postagem = postagemRepository.findById(id);: Cria um Objeto Optional da Classe Postagem chamado postagem, que receberá o resultado do Método findById(id). Como o Método pode retornar um Objeto Nulo, caso ele não seja encontrado, utilizaremos um Objeto Optional para encapsular a resposta do Método findById(id) e evitar o erro NullPointerException.

Linhas 69 e 70: Através do Laço Condicional if, checaremos se o Objeto postagem está vazio (postagem.isEmpty()), ou seja, Objeto Nulo. Se o Objeto estiver vazio, lançaremos uma Exception contendo o HTTP Status NOT FOUND 🡪 404 (Não Encontrado!), através da Classe ResponseStatusException. Através do comando throw new ResponseStatusException(HttpStatus.NOT_FOUND); a Exception será lançada e as próximas linhas de código do Método serão ignoradas.

Linha 73: Caso contrário, o Método padrão da Interface JpaRepository deleteById(Long id) será executado e o HTTP Status NO_CONTENT 🡪 204, HTTP Status padrão do Método, será enviado na Resposta da Requisição, indicando que o Objeto foi Excluído.

Depois de Criar o Método, observe que foram importados mais 3 pacotes, como mostra a imagem abaixo (indicados pelas Setas vermelhas):

Para concluir, não esqueça de Salvar o código (File 🡪 Save All) e verificar se o Projeto está em execução.



👣 Passo 02 - Testar no Insomnia

Agora vamos criar a Requisição para o delete(Long id):

  1. Clique com o botão direito do mouse sobre a Pasta Postagem para abrir o menu e clique na opção New Request.
  1. Será criada uma nova Requisição (New Request) dentro da pasta Postagem.

  2. Dê um duplo clique sobre a nova requisição (New Request), informe o nome da requisição (indicado na imagem abaixo na cor amarela) e pressione a tecla enter do seu teclado.

  1. Selecione o Método HTTP que será utilizado (DELETE) na requisição, indicado na imagem abaixo na cor verde.
  1. Configure a requisição conforme a imagem abaixo:
  1. No item marcado em amarelo na imagem acima, informe o endereço (endpoint) da Requisição. A requisição Deletar Postagem foi configurada da seguinte maneira:

    • A primeira parte do endereço (http://localhost:8080) é o endereço do nosso servidor local. Quando a API estiver na nuvem, ele será substituído pelo endereço da aplicação na nuvem.
    • A segunda parte do endereço é o endpoint configurado na anotação @RequestMapping, em nosso caso /postagens/.
    • A terceira parte (/3) é a varável de caminho (@PathVariable) id. Informe o id da postagem que você deseja apagar.
  2. Para testar a requisição, com a aplicação rodando, clique no botão .

  3. O resultado da requisição você confere na imagem abaixo:

  1. Observe que a aplicação retorna apenas um HTTP Status 204 🡪 NO_CONTENT (indicado em verde na imagem acima). Este Status indica que a Requisição foi bem sucedida!, o Objeto foi apagado e o seu conteúdo não existe mais. Observe no Corpo da Resposta que não foi retornado nenhum Objeto (indicado pela seta verde), porque ele foi apagado.

  2. Caso o Objeto não seja encontrado, a aplicação retornará o HTTP Status 404 🡪 NOT FOUND (Não encontrado), como mostra a figura abaixo (marcado em laranja).