Exercícios — Aula 05¶
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. Lembre de parar e executar de novo o servidor depois de cada alteração.
Exercício 1 — Prever os códigos de status¶
Objetivo. Relacionar cada requisição com o código que a API devolve.
Enunciado. Com o servidor recém-iniciado e uma editora cadastrada, preveja o código de status de cada requisição.
| Requisição | Código previsto |
|---|---|
POST /editora, com um JSON completo |
|
GET /editora/nao-existe |
|
DELETE /editora/nao-existe |
|
GET /editoras |
|
PUT /editora/SEU_ID |
Como conferir. Faça cada requisição com curl -i, que mostra o código na primeira linha da resposta. Para a última, use curl -i -X PUT. Considere resolvido quando você consegue explicar a diferença entre os três casos que parecem erro: o endereço que não existe, o verbo que a rota não aceita e o id que não foi encontrado.
Dica
Olhe para o controller. Para cada requisição, pergunte: existe um método com esse verbo e esse endereço? Se existe, o que ele devolve quando o service não encontra nada?
Exercício 2 — Emprestar um livro pela API¶
Objetivo. Expor em uma rota um método que a classe já tem.
Enunciado. O método emprestar() de Livro existe desde a Aula 02, mas a API ainda não o usa. Crie a rota POST /livro/{isbn}/emprestar, que empresta o livro e devolve o texto que o método produz. Siga o desenho da aula: o controller chama um método novo do LivroService, e o service chama o emprestar() do livro.
Como conferir. Cadastre o livro de ISBN 123. Depois:
- o primeiro
curl -X POST http://localhost:8080/livro/123/emprestarrespondeLivro emprestado com sucesso; - o segundo responde
Livro já está emprestado; GET /livro/123mostra"disponivel":false.
Dica
No controller, o método devolve String e recebe o ISBN com @PathVariable. No service, use o buscar que já existe para encontrar o livro.
Exercício 3 — Cadastrar autores¶
Objetivo. Construir um controller e um service do zero.
Enunciado. A classe Autor está no projeto, mas não tem rotas. Crie AutorService e AutorController com duas rotas:
POST /autorcadastra um autor e responde com201;GET /autorlista todos os autores cadastrados.
Como Autor não tem identificador, guarde os autores em um ArrayList.
Como conferir.
curl -i -X POST http://localhost:8080/autor \
-H "Content-Type: application/json" \
-d '{"nome":"Frank Herbert","localNascimento":"Tacoma","idade":65}'
A resposta tem o código 201 e o JSON:
Abrir http://localhost:8080/autor no navegador mostra uma lista com esse autor.
Dica
Use EditoraService e EditoraController como molde. O service fica menor: não precisa de UUID nem de HashMap. O controller cria o service com new, como os outros.