Principais anotações para um projeto em Spring

Principais anotações para um projeto em Spring, neste pequeno artigo mostro as principais anotações para um projeto em Spring, nele vou mostrar as anotações que um programador java utiliza no dia a dia do desenvolvimento de apis usando o framework Spring do Java.
Vamos começar com as anotações das camadas da aplicação:
Anotações de camadas
@Controller ou @RestController
Usado para definir o Controller da nossa aplicação .
@Service:
Usado para definir que uma classe é um serviço (camada de serviço).
@Repository
Usado para definir que uma classe é um repositório (camada de persistência).
@Configuration
Usado para definir que uma classe é uma classe de configuração do Spring.
@ControllerAdvice
Usado para definir que uma classe será responsável por centralizar o tratamento de exceções.
@Component
Usado para definir que uma classe é um componente gerenciado pelo contêiner de inversão de controle (IoC container).
@Bean
Usado para definir que um método será responsável por (produzir/fornecer) um objeto gerenciado pelo contêiner de inversão de controle do Spring.
Anotações de um Controller
@Controller
Usado para definir o controller, no caso em um aplicativo Spring MVC.
@RestController
Usado para definir o controller de uma api.
@RequestMapping(“api”)
Usado para mapear a url de um recurso da api.
Anotações dos métodos do Controller de uma api
@GetMapping
Anotação usado no método de requisição da api (Get).
@PutMapping(value = “/{id}”)
Anotação usado no método de requisição da api (Put).
@PostMapping
Anotação usado no método de requisição da api (Post).
@DeleteMapping(“/{id}”)
Anotação usado no método de requisição da api (Delete).
Outras Anotações importantes de uma api
@RequestParam(defaultValue = “0”) int page
Usado para mapear o parâmetro de uma rota da api.
@ResponseStatus(code = HttpStatus.CREATED)
Usado para definir a resposta da rota de uma api, no exemplo retorna o status (criado=201).
@PathVariable Long id
Usado para mapear a variável da rota de uma api, no caso abaixo mostra como pegar a variável id da rota get.
“`
@GetMapping(“/{id}”)
public ResponseDTO findById(@PathVariable Long id) {
return service.findById(id);
}
“`
@RequestBody RequestDTO requestDTO
Usado para obter o corpo(body) de uma requisição da api.
“`
@PostMapping
public ResponseDTO create(@RequestBody RequestBodyDTO requestBodyDTO) {
return service.create(requestBodyDTO);
}
“`
Anotações de validação uma api:
@Validated
Usado para indicar que a validação de um grupo de elementos a serem validados, permiti a validação parcial de um objeto.
@Valid
Usado validar um item ou objeto.
Anotações de persistência do JPA , ORM
@Entity
Usado para indicar que a classe é uma entidade JPA.
@Table(name = “nome_tabela”)
Usado para definir o nome da tabela.
@Id
Informa que o campo é uma chave primária da entidade.
@GeneratedValue(strategy = GenerationType.IDENTITY)
Informa que o ID deve ser gerado automaticamente.
Exemplos de strategy:
– GenerationType.AUTO
– GenerationType.IDENTITY
– GenerationType.SEQUENCE
@Column(name=’nome da coluna’.length = 11, nullable = false)
Mapeia uma coluna da entidade, especificando o nome, o comprimento e não informa que não permite nulo.
@ManyToOne(fetch = FetchType.LAZY, optional = false)
Define um relacionamento (muitos para um), especificando o carregamento lazy e um relacionamento não opcional.
@OneToMany(mappedBy = “movimentacaoCEI”, cascade = CascadeType.ALL)
Define um relacionamento (um para muitos), especificando o atributo relacionado na outra classe e que qualquer ação nesta entidade terá um efeito cascata na outra, exemplo um delete.
@ManyToMany()
Define um relacionamento (muitos para muitos).
@OrderBy(“id ASC”)
Usado para especificar a ordenação dos elementos de uma consulta.
@JoinColumn(name = “entidade_id”, nullable = false)
Define a coluna de chave estrangeira usada para o relacionamento informando que essa colina não pode receber valor nulo.
Outras Anotações
@Autowired
Usado para injetar dependências em métodos, ou seja inicializar.
@JsonInclude(Include.NON_NULL)
Informa que apenas as propriedades que não são nulas serão exibidas no JSON.
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
Informa que a propriedade anotada deve apenas ser serializada e não desserializada, usado para evitar que alguns campos não sejam expostos nas respostas da API.
@JsonProperty(“_id”) Long id
Usado para renomear uma propriedade, no caso como a propriedade será exibida no json.
@ExceptionHandler({NotFoundException.class, RecordNotFoundException.class})
Usado para capturar e tratar exceções específicas em métodos de um controlador de tratamento de exceções, no exemplo ele captura exceções NotFound e RecordNotFound.
“`
@ExceptionHandler({NotFoundException.class, RecordNotFoundException.class})
public ResponseEntity<String> handleNotFoundException(Exception ex) {
return new ResponseEntity<>(“Recurso não encontrado: ” + ex.getMessage(), HttpStatus.NOT_FOUND);
}
“`
@Value
Usada para injetar valores de propriedades em campos de uma classe que é gerenciada pelo Spring, no exemplo pego as informação do arquivo (application.properties) e injeto no atributo.
Valor no arquivo (application.properties)
“`
path.folder.files=/caminho/dos-arquivos
“`
Mapeamento no atributo da classe
“`
@Component
public class Classe {
@Value(“${path.folder.files}”)
private String pathFolder;
}
“`
Esta foi uma breve descrição das principais anotações para um projeto em Spring, o ecossistema do Spring é bastante vasto então esse artigo cobre uma pequena parcela das anotações existentes, para mais conhecimento vou deixar o link da documentação do Spring, logo abaixo:
Referencias: