Nos artigos anteriores vimos como exibir dados para o usuário que está acessando a nossa aplicação. Nesse contexto o usuário fica bastante limitado visto que só consegue consumir informações exibidas pela aplicação. Para tornar a aplicação mais interativa, é necessário que o usuário possa também enviar dados para a aplicação, e a forma mais comum de entrada de dados em aplicações Web são os formulários.
Os formulários possuem dois atributos importantes que serão utilizados para a comunicação com a aplicação sendo eles, os atributos method
e action
:
method
: é o método que será utilizado para o envio das informações para o servidor HTTP que pode ser POST
ou GET
. Os valores POST
e GET
são chamados de verbos HTTP e são formas de como as informações são enviadas via protocolo HTTP. No caso do método GET
as informações são passadas via URL enquanto que no método POST
, as informações são enviadas no corpo da requisição HTTP.action
: nesse atributo deve ser definida uma URL. É para essa URL que os dados do formulário serão enviados.Outra informação importante dos formulário é o atributo name
de cada campo que obrigatoriamente deve ser definido. Esse atributo serve como referência para o envio dos dados e a recuperação deles na aplicação - como se você estivesse nomeando uma variável. Veja o exemplo abaixo de formulário com os atributos method
, action
e name
nos campos.
IMPORTANTE: Perceba que os atributos estão acompanhados do prefixo
th
e a URL doaction
está sendo gerada com a sintaxe@{}
. Ambos são recursos do Thymeleaf.
Tendo o formulário pronto em uma visão (um arquivo HTML) precisamos dizer ao Spring para exibi-lo em uma rota. A titulo de exemplo crie um controlador chamado SomadorController.java
. Nele crie um método chamado soma
e faça o mapeamento desse método para a rota soma
.
Se você testar a aplicação nesse momento verá que o formulário está enviando os dados porém como não configuramos a nossa aplicação para receber esses dados o Spring está exibindo a página padrão Whitelabel Error Page
. Para resolver esse problema será necessário criar um novo método mapeado para a rota que foi definida no atributo action
do formulário.
Aqui temos alguma diferenças importantes. Primeiramente estamos utilizando uma anotação diferente, a PostMapping
. Como o nome da anotação já sugere, estamos mapeando agora uma rota que espera receber uma requisição do tipo POST
- uma requisição feita via formulário configurada com o method="POST"
. A segunda alteração é a adição da anotação @RequestParam
como parâmetros do método somar
. Essa anotação faz a ligação entre os campos do formulário com as variáveis Java para serem utilizadas dentro do método. A partir desse ponto apenas fazemos um processamento simples realizando a soma dos valores e enviando esses dados para a visão como já visto anteriormente.
A Figura abaixo ilustra o mapeamento entre a visão e o controlador. Fique atento pois os nomes devem ser os mesmos para que a comunicação entre eles funcione corretamente.
Observe que temos:
@PostMapping()
que está mapeado com o atributo th:method="POST"
do formulário"/somar"
que está mapeado com o atributo th:action="@{/somar}"
do formulário@RequestParam
que está mapeado com o atributo th:name
dos campos do formulário
@RequestParam
no método do controlador