Exercícios — Aula 12¶
Exercícios complementares
Propostos por este site para praticar a aula. Não são do professor, não valem nota e não têm entrega.
Faça depois do roteiro da aula, na ordem, usando a API que você construiu, com os quatro destinos cadastrados: Paris, Rio de Janeiro, Salvador e Manaus.
Exercício 1 — Prever a paginação¶
Objetivo. Ler os campos de uma resposta paginada.
Enunciado. Sem executar, preveja a resposta de GET /destinos?size=3&page=1.
| Campo | Valor previsto |
|---|---|
Destinos em content |
|
number |
|
totalPages |
|
totalElements |
|
last |
Como conferir. Abra o endereço no navegador e compare. Depois responda: o que GET /destinos?size=3&page=2 devolve, e por que não é um erro?
Dica
São quatro destinos, em páginas de três. A primeira página é a de número 0.
Exercício 2 — Buscar por parte do nome¶
Objetivo. Criar uma consulta só com o nome de um método.
Enunciado. Crie a rota GET /destinos/busca?nome=..., que devolve uma lista com os destinos cujo nome contém o texto recebido. No repository, o método se chama findByNomeContaining, recebe uma String e devolve List<Destino>. Você não escreve o corpo dele.
Como conferir.
/destinos/busca?nome=Riodevolve um destino, o Rio de Janeiro;/destinos/busca?nome=andevolve dois: Rio de Janeiro e Manaus;/destinos/busca?nome=rio, com letra minúscula, devolve uma lista vazia.
Olhe no terminal o SQL que foi executado e encontre a parte que corresponde ao Containing.
Dica
São três acréscimos: a linha do método no repository, um método no service que o chama e a rota no controller, com @RequestParam String nome.
Exercício 3 — Cadastrar atrações e descobrir um problema¶
Objetivo. Usar o relacionamento entre as tabelas e reconhecer uma referência circular.
Enunciado. Crie AtracaoService e AtracaoController, com duas rotas: POST /atracoes, que salva uma atração, e GET /atracoes, que lista todas. O destino da atração vem no JSON, só com o id:
curl -X POST http://localhost:8080/atracoes \
-H "Content-Type: application/json" \
-d '{"nome":"Torre Eiffel","descricao":"Torre de ferro","destino":{"id":1}}'
Como conferir.
- O cadastro responde com a atração e o
idgerado. No console do H2, a linha da tabelaATRACAOtem1na colunaID_DESTINO. - Agora abra
/atracoesno navegador. A resposta vem enorme e repetitiva. O mesmo passa a acontecer com/destinos.
Explique o que está acontecendo. Você não precisa consertar: é o primeiro assunto da próxima aula.
Dica
O Spring monta o JSON seguindo os getters. Comece por uma atração e veja aonde getDestino() leva, e depois aonde getAtracoes() leva. A dica "Uma resposta que nunca termina", do roteiro da Aula 07, descreve a mesma situação.