E aí, pessoal. Como estão? Hoje eu venho abordar um tema super interessante, uma forma de criar aplicações monolíticas com Java e Thymeleaf. Embora hoje seja comum vermos muito microserviços, aplicações segmentadas em front-end e back-end, ainda há muitos projetos que optam por desenvolver o famoso monolito, e com Java, certamente uma boa opção para esse tipo de desenvolvimento é Spring Boot e Thymeleaf. O sugerido para esse artigo é que se tenha conhecimento básico de Spring Boot, nesse artigo vamos focar em implementar e explicar o Thymeleaf porém também usaremos algumas funcionalidades do Spring Boot.

O que é o Thymeleaf

O Thymeleaf é um mecanismo de modelo Java XML/XHTML/HTML5 que pode funcionar em ambientes da Web e não Web. Ele é mais adequado para servir XHTML/HTML5 na camada de visualização de aplicativos da Web baseados em MVC, mas pode processar qualquer arquivo XML mesmo em ambientes offline.

Criando projeto Spring Boot

Agora criaremos o nosso projeto Spring Boot normal, porém adicionando a dependência do Thymeleaf. Para criar o projeto, podemos fazer dentro até mesmo da nossa IDE, ou iremos no site do Spring Initializr.

Segue os dados para criação do projeto via link Spring Initializr:

Com o conhecimento prévio em Spring Boot já irão entendendo exatamente o que tem nessa tela, e é assim que utilizaremos o projeto, apenas duas dependências, para mapearmos a nossa requisição a partir do controller e recebe-la usando o Spring Web.

O projeto virá normal e nós vamos fazer dois passos, criamos a nossa camada de controllers para receber a requisição, isso não é necessário, é questão de organização. E também criar a nossa classe para o “Hello World” dentro de controllers. Após isso, também iremos criar um arquivo HTML dentro de resources/templates, porque esse é o caminho que o Thymeleaf vai buscar os arquivos HTML referenciados.

Hello world estático

Para nós fazermos um “Hello World” básico e estático é super simples, relembrando a hierarquia de arquivos que iremos usar é a seguinte:

Começando em templates, iremos criar um arquivo hello.html e simplesmente adicionar um h1 com o Hello World desejado, pode ser de qualquer forma, nesse exemplo usei apenas isso dentro do arquivo: <h1>Hello World!</h1>

Até agora super simples, agora vamos fazer um método pra gente chamar esse nosso arquivo HTML.

Partindo para a camada de “controllers” onde vamos criar a classe Java “PrimeiroController” e então configurarmos ele. O código é o seguinte:

@Controller
public class PrimeiroController {

    @GetMapping("/hello-world")
    public String HelloWorld(){
        return "hello";
    }
}

O que estamos fazendo aqui é apenas receber uma requisição do tipo GET e essa requisição está mapeada para o endpoint /hello-world. No corpo desse método nós estamos retornando uma String, e essa String deve ser o nome do seu arquivo HTML criado, assim que o Thymeleaf vai identificar qual página HTML ele deve renderizar. Então return "nomeDoArquivoHTML"; é o necessário para que ele encontre o seu arquivo HTML, e não precisa fornecer a extensão, nesse caso seria “.html”.

No momento que seu projeto estiver com esses códigos basta rodar sua aplicação Spring Boot e acessar o localhost:8080/nome mapeado, se foi feito igual o que está aqui, será esse o link para acessar: http://localhost:8080/hello-world

Pronto, o seu Hello World com Thymeleaf e Spring Boot está pronto! Super simples, não é?

Bônus: Passando mensagem dinâmica para o HTML

Beleza, já fizemos o Hello World, agora vamos passar uma mensagem qualquer para que o Thymeleaf adicione no nosso HTML!

Primeiramente no nosso arquivo HTML, iremos adicionar o seguinte código:

<h1 th:text="${mensagem}"></h1>

Um simples h1 do HTML seguido de uma propriedade do Thymeleaf para mensagens, logo após a propriedade devemos passar um texto, então nesse momento estamos interpolando uma variável “mensagem” que irá conter uma mensagem.

Para fazermos essa mensagem ser renderizada conforme um parâmetro que iremos passar, vamos fazer o seguinte método no nosso controller:

@GetMapping("/dinamico/{msg}")
    public String dinamico(Model model, @PathVariable String msg){
        model.addAttribute("mensagem", msg);
        return "hello";
    }

Note que aqui estamos recebendo alguns parâmetros e também uma Model, essa Model é usada para enviarmos valores e objetos para o nosso HTML. Nosso método está recebendo por uma URL personalizada e por meio dessa URL também estamos recebendo uma “mensagem”, a mensagem armazenamos na variável “msg” para usarmos depois. Nesse momento nós chamamos nosso objeto Model pela instancia “model” e iremos adicionar um atribulo nele usando o método addAttribute, para usarmos o método primeiro iremos dizer o nome do atributo e depois o valor dele, nesse caso o nome vai ser “mensagem” ( esse será o nome do nosso atributo que iremos interpolar no HTML) e também iremos inserir o valor da variável “msg” que é o valor que recebemos por meio da URL, esse valor não precisa ser necessariamente o recebido pela url, porém, como nossa intenção é mudar esse valor durante a aplicação rodando, é dessa forma que vai funcionar, considere o método addAttribute

E não se esqueça o return “nomeDoHtml" deve estar correto e sem a extensão do arquivo, isso irá gerar erro caso não esteja correto!

Para acessar novamente, basta rodar a aplicação Spring Boot e acessar o endpoint mapeado corretamente. Por fim, se o mapeamento foi feito conforme esse artigo, a nossa URL vai ficar assim: http://localhost:8080/dinamico/ {Aqui vai estar quaisquer coisa que você deseja renderizar na tela}

Super interessante, não? Esse é só o começo do que o Thymeleaf pode fazer, ele realmente é capaz de muito mais!

Conclusão

Finalizando esse artigo espero que vocês tenham ideia do básico do Thymeleaf e que conheçam um pouco melhor também, é uma forma bem simples e prática de criar aplicações um pouco menores e que não possuem necessidade de ser segmentadas em front-end e back-end, o que é muito comum.

Realmente espero ter passado algum conhecimento para vocês e possam assim conhecer e talvez optarem por ver mais a fundo sobre o Thymeleaf e até mesmo criarem os próprios projetos!

Segue o link desse projeto no GitHub:https://github.com/geraldodf/hello-world-thymeleaf-cod3r