Faala pessoal! Tudo bem?
Estou de volta para mais um post sobre o projeto Rest API e para relembrar sobre o que já foi mostrado, deixo essa lista dos articles já publicados:
Continuando com o tutorial do último post:
Adicionando anotação para URI
Para deixar o código mais organizado, adicionei uma anotação chamada RequestMapping e passei por parâmetro a URI da classe de controle e removi a anotação GetMapping do GET ALL editoras:
Isso é bom porque ajuda a fazer uma manutenção mais fácil, por exemplo, se a classe de controle de usuários tivesse 100 métodos de manipulação e a URI fosse "users_controller", caso decidisse mudar para apenas "users", ou sairia removendo o "-controller" nos 100 métodos, ou daria um "Localizar + Substituir" correndo o risco de alterar alguma informação no código.
GET ONE
O método para buscar todas as editoras já está pronto. Agora, podemos fazer um método que retorne uma editora em específico de acordo com o ID dessa editora.
Aqui nesse ponto, podemos usar Response Entity que nos dá a possibilidade de manipular o cabeçalho, outras coisas, e o que será usado aqui será a modificação do status, sendo alguns deles que mais usarei:
- 200 OK
- 404 Not Found
- 201 Created
- 204 No Content
Aqui você pode ver mais sobre os códigos de status de respostas HTTP.
O código mais enxuto de retorno de uma editora pode ser escritode 2 formas:
Esse é um método que recebe um id pela URI (por isso a anotação @PathVariable) e que, faz a busca pelo id, mapeia a editora e retorna com status OK(200) incluindo a editora encontrada. Caso não encontre, cai no orElse e retorna a construção de um Not Found (404).
Já nessa segunda versão, o map desse método atua da mesma forma que o primeiro, porém a construção é mais enxuta
Uma terceira versão, menos enxuta, pode ser construída da seguinte forma:
GET BY NAME
Uma terceira forma de consulta é pelo nome, por exemplo.
Um modo simples é usando o Query Methods do JPA, então na Interface repository de editora. Utilizando esse tipo de Query, tem que seguir algumas regras:
- iniciar o método com find ou query
- utilizar o By
- se for a busca por propriedade, colocar o nome na classe Model da propriedade: por exemplo, na Model de Users tem um atributo chamado nome, na Interface ficaria:
List<Users> findByNome(String nome)
Uma outra palavra reservada que pode ser utilizada é o Containing no final do nome do método na Interface, que faz a busca em todas as linhas do banco que contém o conjunto de caracteres passados, ele equivale ao Like em query de DB SQL.
List<Users> findByNomeContaining(String nome)
OBS.: O JPA implementa esses métodos em tempo de execução, então não precisa implementá-los.
A passagem do dado a ser buscado pode ser:
- pela URI, como o id e ai usa a anotação @PathVariable;
- pelo corpo da requisição e ai usa a anotação @RequestBody como é usado na criação e edição.
POST
Na imagem abaixo, temos o método para salvar uma nova editora no banco de dados:
A anotação @PostMapping indica que aquele método deve ser usado quando uma requisição do tipo POST é iniciada;
A anotação @RequestBody com o status CREATED modifica o status de resposta para 201,
Esse método retorna os dados da editora cadastrados juntamente com o ID.
Essa é apenas uma opção, poderia retornar apenas o id com: pCompanyRepository.save(pCompany).getId()
Poderia retornar uma mensagem de sucesso, ou apenas o status. Por ora vamos deixar assim.
PUT
O método de edição é muito parecido com a criação, apenas com alguns detalhes a mais, como na imagem, na ediçção primeiro verifiquei se aquela editora está cadastrada no banco de dados, caso não esteja, retorna o erro 404.
Caso exista:
- seta o ID no objeto editora que veio na requisição;
- quando chama o save, pelo fato do atributo ID não estar vazio, o JPA vai entender que precisa editar ao invés de salvar uma nova linha no banco.
- no final, há o retorno da editora editada com status 200.
DELETE
A deleção é bem simples também, há verificação de existência de editora, em seguida remove a editora através do ID e retorna o corpo da requisição vazio com o status 204.
Bom pessoal, por hoje é isso, o repositório no GitHub pode ser acessado por aqui.
Até a próxima!
Top comments (0)