Spring MVC
Por que utilizar o Spring MVC
Spring MVC auxilia na organização de uma aplicação web ao seguir o princípio da separação de responsabilidades, facilitando o desenvolvimento, teste e manutenção do código. Oferece um framework para criação de páginas web e tratamento de requisições de usuários, além de possibilitar a integração com a lógica de negócio e bancos de dados.
Em nossa aplicação, utilizamos uma arquitetura em três camadas para separar a lógica em módulos distintos. Temos as camadas repository, service e controller. Essa separação facilita a manutenção e o teste da aplicação.
Anotações Principais e Seu Papel
Para cada camada, existem anotações específicas, essenciais para que o Spring reconheça e registre automaticamente os componentes no contexto da aplicação (iremos abordar este conceito posteriormente). Isso contribui para a manutenção de uma arquitetura mais limpa e melhora a legibilidade do código.
Anotação da Camada Repository
A anotação @Repository é utilizada para indicar uma classe que interage com o banco de dados. Essas classes normalmente contêm métodos para realizar operações CRUD (Create, Read, Update, Delete).
UserRepository.java
Neste exemplo, UserRepository é marcado como um repositório, permitindo que o Spring gerencie exceções relacionadas ao acesso a dados e o integre automaticamente na aplicação.
Anotação da Camada de Serviço
A anotação @Service é utilizada para designar uma classe como componente da lógica de negócios. Essas classes contêm métodos que implementam as regras e operações de negócio da aplicação.
UserService.java
A anotação @Service indica que esta classe contém a lógica de negócio da aplicação, facilitando seu uso em outras partes da aplicação. Isso simplifica o desenvolvimento, pois não é necessário criar manualmente instâncias desta classe — o Spring faz isso automaticamente.
Anotação da Camada Controller
Como a camada de controlador serve como o ponto de interação entre o cliente e nossa aplicação, é necessário estabelecer endpoints para que os clientes possam acessá-la. Isso envolve associar URLs específicas a cada método, permitindo que os clientes interajam diretamente com esses métodos.
Para isso, é necessário anotar a classe como @Controller e definir um método que atuará como o manipulador de requisições.
Main.java
A anotação @RequestMapping é utilizada para vincular requisições HTTP a métodos específicos no controlador. Ela permite especificar quais padrões de URL e tipos de requisições (como GET ou POST) um método deve responder. Por exemplo, neste caso, o método home() responderá a requisições GET feitas para a URL raiz.
Quando um usuário acessa example.com/, seu navegador envia uma requisição HTTP GET para o servidor, que chega até a aplicação Spring. O framework Spring encontra o @RequestMapping correspondente no HomeController, chama o método home() para tratar a requisição e, em seguida, envia a resposta apropriada de volta ao navegador do usuário.
Existem anotações que fornecem um mapeamento mais preciso para o tipo de método de requisição, como @GetMapping, @PostMapping, @DeleteMapping, entre outras. Em seus atributos, basta especificar a URL que pode ser utilizada para acessá-las.
Main.java
Neste exemplo, se acessarmos a URL /home, seremos direcionados ao método home() APENAS se for uma requisição GET. Se for utilizado um tipo diferente de método de requisição, o servidor responderá com um erro 404 Not Found para essa URL.
@RequestParam
O que são parâmetros de requisição da URL? São os parâmetros que aparecem após o ponto de interrogação na URL. Por exemplo, se temos o endereço -> example.com/home?name=Alex (chave = name, valor = Alex), podemos recuperar diretamente o parâmetro (name) no método welcomeUser().
Main.java
Aqui, o parâmetro name é extraído da URL (/home?name=Alex) e passado para o método welcomeUser().
Também é possível extrair mais de um parâmetro, não apenas um único. Todos os parâmetros na URL devem ser separados pelo símbolo &. Por exemplo: example.com/home?name=Alex&age=20.
Main.java
Neste exemplo, o endpoint /home pode ser acessado por meio de uma URL como example.com/home?name=Alex&age=20, onde name e age são os parâmetros passados para o método.
@PathVariable
No Spring MVC, a anotação @PathVariable é utilizada para vincular uma variável presente na URL diretamente a um parâmetro de método. Permite capturar valores dinâmicos da URL e utilizá-los dentro do método.
Caso seja necessário definir uma URL de forma dinâmica, ou seja, passar um valor diretamente na própria URL, pode-se utilizar a anotação @PathVariable.
Por exemplo, se houver um padrão de URL como /users/{id}, é possível utilizar @PathVariable para acessar a parte {id} da URL e passá-la como parâmetro para o método.
Main.java
Neste exemplo, o id é extraído da URL (/user/123) e passado para o método getUser(), onde o valor 123 é atribuído ao parâmetro userId.
Essas anotações auxiliam os desenvolvedores a configurar facilmente o tratamento de requisições HTTP, vincular dados a objetos e gerenciar respostas, aprimorando a legibilidade e a manutenibilidade do código.
Resumo
O Spring MVC simplifica o desenvolvimento de aplicações web ao separar o tratamento de requisições, a lógica da aplicação e a renderização da visualização. Os controladores, marcados com a anotação @Controller ou @RestController, tratam as requisições e retornam dados para exibição.
1. O que a anotação @Controller faz no Spring MVC?
2. Qual anotação de método é utilizada para lidar com GET requests no Spring MVC?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
What is the difference between @RequestParam and @PathVariable?
Can you explain more about the three-tier architecture in Spring MVC?
How does Spring automatically create instances of annotated classes?
Awesome!
Completion rate improved to 3.45
Spring MVC
Deslize para mostrar o menu
Por que utilizar o Spring MVC
Spring MVC auxilia na organização de uma aplicação web ao seguir o princípio da separação de responsabilidades, facilitando o desenvolvimento, teste e manutenção do código. Oferece um framework para criação de páginas web e tratamento de requisições de usuários, além de possibilitar a integração com a lógica de negócio e bancos de dados.
Em nossa aplicação, utilizamos uma arquitetura em três camadas para separar a lógica em módulos distintos. Temos as camadas repository, service e controller. Essa separação facilita a manutenção e o teste da aplicação.
Anotações Principais e Seu Papel
Para cada camada, existem anotações específicas, essenciais para que o Spring reconheça e registre automaticamente os componentes no contexto da aplicação (iremos abordar este conceito posteriormente). Isso contribui para a manutenção de uma arquitetura mais limpa e melhora a legibilidade do código.
Anotação da Camada Repository
A anotação @Repository é utilizada para indicar uma classe que interage com o banco de dados. Essas classes normalmente contêm métodos para realizar operações CRUD (Create, Read, Update, Delete).
UserRepository.java
Neste exemplo, UserRepository é marcado como um repositório, permitindo que o Spring gerencie exceções relacionadas ao acesso a dados e o integre automaticamente na aplicação.
Anotação da Camada de Serviço
A anotação @Service é utilizada para designar uma classe como componente da lógica de negócios. Essas classes contêm métodos que implementam as regras e operações de negócio da aplicação.
UserService.java
A anotação @Service indica que esta classe contém a lógica de negócio da aplicação, facilitando seu uso em outras partes da aplicação. Isso simplifica o desenvolvimento, pois não é necessário criar manualmente instâncias desta classe — o Spring faz isso automaticamente.
Anotação da Camada Controller
Como a camada de controlador serve como o ponto de interação entre o cliente e nossa aplicação, é necessário estabelecer endpoints para que os clientes possam acessá-la. Isso envolve associar URLs específicas a cada método, permitindo que os clientes interajam diretamente com esses métodos.
Para isso, é necessário anotar a classe como @Controller e definir um método que atuará como o manipulador de requisições.
Main.java
A anotação @RequestMapping é utilizada para vincular requisições HTTP a métodos específicos no controlador. Ela permite especificar quais padrões de URL e tipos de requisições (como GET ou POST) um método deve responder. Por exemplo, neste caso, o método home() responderá a requisições GET feitas para a URL raiz.
Quando um usuário acessa example.com/, seu navegador envia uma requisição HTTP GET para o servidor, que chega até a aplicação Spring. O framework Spring encontra o @RequestMapping correspondente no HomeController, chama o método home() para tratar a requisição e, em seguida, envia a resposta apropriada de volta ao navegador do usuário.
Existem anotações que fornecem um mapeamento mais preciso para o tipo de método de requisição, como @GetMapping, @PostMapping, @DeleteMapping, entre outras. Em seus atributos, basta especificar a URL que pode ser utilizada para acessá-las.
Main.java
Neste exemplo, se acessarmos a URL /home, seremos direcionados ao método home() APENAS se for uma requisição GET. Se for utilizado um tipo diferente de método de requisição, o servidor responderá com um erro 404 Not Found para essa URL.
@RequestParam
O que são parâmetros de requisição da URL? São os parâmetros que aparecem após o ponto de interrogação na URL. Por exemplo, se temos o endereço -> example.com/home?name=Alex (chave = name, valor = Alex), podemos recuperar diretamente o parâmetro (name) no método welcomeUser().
Main.java
Aqui, o parâmetro name é extraído da URL (/home?name=Alex) e passado para o método welcomeUser().
Também é possível extrair mais de um parâmetro, não apenas um único. Todos os parâmetros na URL devem ser separados pelo símbolo &. Por exemplo: example.com/home?name=Alex&age=20.
Main.java
Neste exemplo, o endpoint /home pode ser acessado por meio de uma URL como example.com/home?name=Alex&age=20, onde name e age são os parâmetros passados para o método.
@PathVariable
No Spring MVC, a anotação @PathVariable é utilizada para vincular uma variável presente na URL diretamente a um parâmetro de método. Permite capturar valores dinâmicos da URL e utilizá-los dentro do método.
Caso seja necessário definir uma URL de forma dinâmica, ou seja, passar um valor diretamente na própria URL, pode-se utilizar a anotação @PathVariable.
Por exemplo, se houver um padrão de URL como /users/{id}, é possível utilizar @PathVariable para acessar a parte {id} da URL e passá-la como parâmetro para o método.
Main.java
Neste exemplo, o id é extraído da URL (/user/123) e passado para o método getUser(), onde o valor 123 é atribuído ao parâmetro userId.
Essas anotações auxiliam os desenvolvedores a configurar facilmente o tratamento de requisições HTTP, vincular dados a objetos e gerenciar respostas, aprimorando a legibilidade e a manutenibilidade do código.
Resumo
O Spring MVC simplifica o desenvolvimento de aplicações web ao separar o tratamento de requisições, a lógica da aplicação e a renderização da visualização. Os controladores, marcados com a anotação @Controller ou @RestController, tratam as requisições e retornam dados para exibição.
1. O que a anotação @Controller faz no Spring MVC?
2. Qual anotação de método é utilizada para lidar com GET requests no Spring MVC?
Obrigado pelo seu feedback!