Até agora vimos como subir um servidor HTTP e como responder uma requisição com uma resposta HTML na rota padrão da aplicação, ou seja, na rota /
. Se seu site fosse o Google, a rota padrão seria https://www.google.com.br/
. Mas e se você quisesse criar uma rota para a página de pesquisa, por exemplo, https://www.google.com.br/search
. Como fazer isso?
Primeiro é importante ter em mente que uma rota é um caminho que o usuário pode percorrer para chegar a um recurso. Por exemplo, a rota /
é o caminho que o usuário percorre para chegar ao recurso que é a página inicial do site, no caso do Spring Boot, o recurso é o arquivo index.html
. Essa é uma configuração feita pelo servidor HTTP, que é o Tomcat no caso do Spring Boot.
Para adicionarmos novas rotas em uma aplicação Spring Boot, precisamos criar um classe conhecida como controlador. Essa classe é responsável pelo mapeamento entre as rotas e os métodos que serão executados quando uma requisição for feita pelo usuário. Por exemplo, se você acessar a rota http://localhost:8080/home
atualmente na aplicação, você receberá um erro, pois não existe nenhuma rota mapeada para /home
. Para mapear essa rota, precisamos criar um controlador que mapeie a rota /home
para um método que será executado quando essa rota for acessada.
Não se preocupe tanto com o termo controlador agora, iremos explorar ele em mais detalhes mais pra frente. Porém perceba que o nome já possui uma convenção a ser seguida, que é o sufixo
Controller
.
Para criar um controlador, crie uma classe chamada HomeController
na pasta src/main/java/{group}/{artifact}
- Lembre-se, o group e o artifact são os valores que você definiu quando criou o projeto - com o seguinte conteúdo:
Aqui temos algumas novidades. A principio temos uma classe com o nome HomeController
que possui um método chamado home()
. Até ai nada de mais, porém temos algumas anotações que não vimos antes.
As anotações são uma forma de adicionar metadados a uma classe ou método. Você pode entender metadados como informações complementares ao código fonte. São nas anotações que muito da “mágica” do Spring Boot acontece.
Por exemplo, com a anotação @GetMapping(“/home”) estamos dizendo ao spring que quando o usuário acessar essa rota em seu navegador (http://localhost:8080/home
), o método home()
deve ser executado. Como isso é feito, ou seja, como o Spring fica ouvindo as requisições, compara que a resquisição é para a rota /home
e não outra rota qualquer, encontra a classe HomeController
e executa o método home()
não sabemos, pois toda essa lógica e código está abstraído na anotação.
Isso acaba simplificando o desenvolvimento, pois não precisamos nos preocupar com esses detalhes, apenas precisamos saber que a anotação @GetMapping("/home")
mapeia a rota /home
para o método home()
.
Além da anotação @GetMapping("/home")
, temos também a anotação @Controller
, como o nome sugere essa anotação converte a classe para um tipo especial conhecido como Controlador. Essa classe é o ponto de entrada para qualquer requisição feita pelo cliente.
Já a anotação @GetMapping("/hello")
, como vimos indica que o método hello()
será chamado quando uma requisição GET for feita para a rota /hello
.
Para testar a aplicação, suba o servidor HTTP e acesse a rota /hello
no navegador. Você deve ver a mensagem “Rota /hello” no terminal.
Até agora vimos como mapear uma rota a um método Java. Porém, como vimos anteriormente, o HTML é a linguagem utilizada para criar páginas web. Então, como retornar uma resposta HTML?
Em aulas anteriores criamos um arquivo HTML simples para retornar como resposta quando o cliente acessasse a rota /
usando a convenção do SpringBoot de armazenar tal arquivo na pasta src/main/resources/static
.
Vamos criar um segundo arquivo, nessa mesma pasta, chamado home.html
com o seguinte conteúdo:
Novamente, um arquivo HTML bem simples. Agora, vamos alterar o método home()
da classe HomeController
para retornar esse arquivo HTML. Para isso, basta alterar o retorno do método para return "home.html";
Se você acessar novamente a aplicação no navegador, você verá a mesma mensagem “Home” escrita na tela, porém ao inspecionar o código fonte da página, você verá que o código HTML foi retornado. Ou seja, o Spring Boot foi capaz de encontrar o arquivo home.html
e retorná-lo como resposta para o cliente.
IMPORTANTE: a rota
@GetMapping("/hello")
, no caso do exemplo/home
é única, ou seja, não pode existir duas rotas com o mesmo nome