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.
1<form th:method="POST" th:action="@{/somar}">2 <input type="number" th:name="primeiroNumero" />3 <input type="number" th:name="segundoNumero" />4 <button type="submit">Send</button>5</form>IMPORTANTE: Perceba que os atributos estão acompanhados do prefixo
the a URL doactionestá 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.
1@Controller2public class SomadorController {3
4 @GetMapping("/soma")5 public String somaForm() {6 return "somaForm.html";7 }8
9}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.
1@PostMapping("/somar")2public String somar(@RequestParam int primeiroNumero, @RequestParam int segundoNumero, Model model) {3 int total = primeiroNumero + segundoNumero;4 model.addAttribute("total", total);5 return "somar.html";6}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