Um projeto Spring Boot - P4
Tags: tutorial, beginners, api, java
Published: 2022-10-01 18:44:50

Faala pessoal, tudo bom? Vamos codar um pouco?

Expandindo a pasta raiz do projeto, temos:

![estrutura de pastas do projeto](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1wolfpswl25xle5w00wx.png)

- O src/main/java é uma estrutura padrão do Maven, nesse caminho é onde o código Java com destino à produção fica.

- O src/main/resources é onde os arquivos estáticos ficam, como exemplo, aqueles arquivos de configuração.

## A PublishingCompany (Editora)
- Com o botão direito, clique no pacote com.projects.library > New > Class

Edite os seguites campos:

- Package: com.projects.library.api.controller
- Name: PublishingCompanyController
e clique em Finish.

Para ver se está tudo certo, vamos criar um método que retorna uma string.
![primeiro código](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sxt2nsrzsji51y6k6k86.png)


- A linha 6 indica para o Spring que a classe é um componente Spring que trata requisições HTTP e que pode retornar respostas.

- Alinha 9 é uma anotação que mapeia requisições do verbo Get  e toda vez que solicitar no endereço com "/publishing-companies" retorna o "Hello World" do método getPublishingCompanies.

----
**Rodando o projeto e testando a requisição no Postman**

Na aba Boot Dashboard, expandindo a seção "local" teremos a library-api[devtools], ela é a que utilizamos para rodar o projeto
![rodar o projeto](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l6f14lotpzik093fvyxv.png)


No Postman, criei uma nova Collection, selecionei o verbo HTTP GET, adicionei a URL:PORT/URI criada no Controller. (no caso localhost:8080/publishing-companies) e dei um Send. O resultado está logo abaixo.

![requisição get no Postman](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xpei4nsjmcyg9q2mqgpd.png)

----
**Criando uma Model Publishing Company**
Antes de iniciar a construção da Model, vamos configurar o Lombok, uma biblioteca que gera os Getters, Setters, Equals e HashCodes das Models, o que deixa o código mais limpo. 

Caso não ache necessário, pode partir para o tópico 6. 

1. Prepare sua IDE por [aqui](https://projectlombok.org/);
2. Clique com o botão direito sobre o projeto;
3. Vá para: Spring > Add starters;
4. Selecione _Lombok_;
5. Clique em Next > Selecione pom.xml > Clique em Finish;
6. Clique com o botão direito sobre o projeto;
7. Vá para New > Class;
8. Em package edite: _com.projects.library.domain.model_;
9. Em Name adicione: _PublishingCompanyModel_ e clique em Finish;
10. Adicione os seguintes atributos:
![class sem lombok](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fuulvdk8npaswiw3wsd5.png)

Note que, existem alguns Warnings na classe pela falta de Getters e Setters, para sanar isso, como já falei antes, usaremos o Lombok, então, nas linhas 3 e 4 adiciono: 
`import lombok.Getter;
import lombok.Setter;`
![class com lombok](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1idap11yndc40qmdb5fh.png)

Assim, temos uma classe mais "enxuta" com os métodos necessários.

Caso não tenha optado pelo Lombok, gere os _Getters_ e _Setters_.

----
**Modificando o _Controller_ de Publishing Companies**

![modificando o método getPublishingCompanies](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4gwp89x7yqk7dcykmn7j.png)

- Na linha 15, modifiquei para que o método retornasse uma lista de Editoras

- Nas linhas 17 a 29 são criados 2 objetos instanciados do tipo da Model de Editora;

- Na linha 31, através do método _asList_ da biblioteca Arrays, é retornado uma lista com os objetos.

O resultado é esse aqui:

![resultado do get de editora](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1gz7bfrkmc5r681fhv72.png)

----
## Gerando um .jar do projeto
1. botão direito do mouse sobre o projeto
2. Run As > Maven build... (o 5)
3. Goals: clean package
4. Run

O arquivo .jar estará na pasta target
Para rodar no terminal:
1. abra a parta target no terminal
2. java -jar nome_projeto-0.0.1-SNAPSHOT.jar

Com isso, podemos rodar o projeto sem precisar abrir a IDE, uma boa pra quando tiver toda a API pronta e quiser testar algum módulo.

----
Chegamos ao fim de mais uma publicação, você pode acompanhar os posts anteriores aqui:

- [Primeiro post](https://dev.to/devs-jequie/um-projeto-rest-api-2pc9)
- [Segundo post](https://dev.to/fllaviacorreia/configurando-o-ambiente-de-desenvolvimento-4a7h)
- [Terceiro post](https://dev.to/fllaviacorreia/um-projeto-spring-boot-p1-nii)

O link do projeto no GitHub você acessa [aqui](https://github.com/fllaviacorreia/library-api).

Até mais!