O que veremos por aqui:
- Criar o Método getById(Long id) para listar uma Postagem específica
Na etapa anterior, começamos a construir a classe PostagemController e implementamos o método getAll(), que retorna todos os objetos da classe Postagem persistidos no banco de dados. Agora, continuaremos a construção da nossa classe controladora, implementando o método getById(Long id).
classDiagram
class Postagem {
- Long id
- String titulo
- String texto
- LocalDateTime data
+ getAll() ResponseEntity List ~Postagem~
+ getById(Long id) ResponseEntity ~Postagem~
+ getByTitulo(String nome) ResponseEntity List ~Postagem~
+ post(Postagem postagem) ResponseEntity ~Postagem~
+ put(Postagem postagem) ResponseEntity ~Postagem~
+ delete(Long id) void
}
Vamos implementar o Método getById(Long id) na Classe Postagem Controller, que retornará um Objeto específico persistido no Banco de dados, identificado pelo id (Identificador único do Objeto). Traçando um paralelo com o MySQL, seria o equivalente a instrução: SELECT * FROM tb_postagens where id = id;.
Para processar o método findById(Long id), utilizaremos dois recursos do Java que tornam o código mais limpo e assertivo: Optional e Expressões Lambda.
Optional
É um contêiner que pode ou não conter um valor não nulo. No nosso contexto, sua função é evitar o lançamento de uma exceção NullPointerException caso a postagem procurada não seja encontrada. O método findById(id) retorna um Optional<Postagem>, que conterá a postagem se ela existir. Caso contrário, o Optional estará vazio, evitando o uso direto de null e tornando o tratamento de valores ausentes mais seguro e legível.
Método map()
Presente na classe Optional, transforma o valor contido no Optional caso ele esteja presente. Em outras palavras, executa uma função (geralmente uma expressão lambda) apenas se houver valor. Caso contrário, o retorno continuará sendo um Optional vazio. Combinado com orElse(), é possível executar uma ação alternativa quando o valor estiver ausente, como lançar uma exceção.
Expressões Lambda
São funções anônimas (sem nome, tipo de retorno ou modificador de acesso). Em Java, permitem escrever métodos de forma mais concisa, diretamente no local de uso. A sintaxe é:
(argumento) -> { corpo da função }Esse recurso é inspirado no paradigma de programação funcional e é semelhante às Arrow Functions do JavaScript/TypeScript.
![]() |
DICA: Caso você tenha alguma dúvida sobre Optional e Expressões Lambda, no Cookbook de Java do Bloco 1 e consulte os respectivos tópicos. |
|---|
Linha 30: A anotação @GetMapping("/{id}") mapeia todas as requisições HTTP GET enviadas para o endereço especificado do recurso Postagem para o método correspondente.
Assim, o método getById(Long id) será acionado quando uma requisição GET for enviada para:
http://localhost:8080/postagens/{id}
Onde {id} é uma variável de caminho (Path Variable) que representa o identificador da postagem.
Linha 31: O método getById(@PathVariable Long id) retorna um objeto do tipo ResponseEntity, pois ele trata uma requisição HTTP e retorna uma resposta HTTP com status e conteúdo apropriados. O parâmetro do método é do tipo Long e representa o id da postagem a ser buscada.
@PathVariable Long id: Essa anotação indica que o valor informado na URL será injetado diretamente no parâmetro id do método. Isso permite buscar dinamicamente a postagem desejada com base no ID informado.
Exemplo:
http://localhost:8080/postagens/1
No exemplo acima, o parâmetro Long id, do Método getById( 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 getById devem possuir o mesmo nome. |
|---|

tb_postagens). Aqui também está sendo utilizado o recurso de Java Generics para indicar que o corpo da resposta será do tipo Postagem.
Linha 32:
return postagemRepository.findById(id): Executa o método findById(id), fornecido pela interface JpaRepository. Esse método retorna um objeto do tipo Optional, que conterá a postagem se ela for encontrada pela chave primária (id) ou estará vazio se não for encontrada.
.map(resposta -> ResponseEntity.ok(resposta)): Caso a postagem seja encontrada, o método map() será executado. Ele recebe a postagem como parâmetro (no exemplo, chamada de resposta) e a encapsula dentro de um ResponseEntity.ok(...), retornando uma resposta HTTP com status 200 OK e o corpo contendo a postagem.
.orElse(ResponseEntity.notFound().build()): Caso o Optional esteja vazio, ou seja, nenhuma postagem com o id informado tenha sido encontrada, o método orElse(...) será acionado. Ele retorna uma resposta HTTP com status 404 Not Found e sem corpo.
Resumindo: O uso combinado de
Optional,map()eorElse()permite tratar de forma segura e elegante a existência ou ausência do objeto buscado, evitandoNullPointerExceptione mantendo o código mais limpo e legível.
Depois de Criar o Método, observe que foram importados mais 2 pacotes, como mostra a imagem abaixo (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.
Agora vamos criar a Requisição para o Método getById():
- Clique com o botão direito do mouse sobre a Pasta Postagem para abrir o menu e clique na opção New HTTP Request.
-
Será criada uma nova Requisição (New Request) dentro da pasta Postagem.
-
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.
- Selecione o Método HTTP que será utilizado (GET) na requisição, indicado na imagem abaixo na cor verde.
- Configure a requisição conforme a imagem abaixo:
- No item marcado em amarelo na imagem acima, informe o endereço (endpoint) da Requisição. A requisição Consultar postagem por ID 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 (/1) é a variável de caminho (@PathVariable) id. Informe o id que você deseja procurar.
-
Para testar a requisição, com a aplicação rodando, clique no botão
.
-
O resultado da requisição você confere na imagem abaixo:
-
Observe que a aplicação quando encontra o Objeto no Banco de dados, além de exibir os dados do Objeto no Corpo da Resposta, respeitando o critério informado na consulta (id 1), ela também retorna um HTTP Status 200 🡪 OK (indicado em verde na imagem acima), informando que a Requisição foi bem sucedida!
-
Caso o Objeto Postagem não seja encontrado, a aplicação retornará o HTTP Status 404 🡪 NOT FOUND (Não encontrado), marcado em laranja na imagem abaixo:
- Caso o Projeto Spring não esteja em Execução, o Insomnia retornará a mensagem abaixo:
- Execute o seu Projeto e teste novamente!
















Voltar