About Me

Hi, my name is Wim Deblauwe, a software developer specialized in Java, Spring, and JVM related tooling.

I wrote Taming Thymeleaf, a book to learn more about using Thymeleaf with Spring Boot. I also have a few open-source projects: one that makes it easy to do Spring Boot error handling, another for integration of Cypress with Testcontainers and a few others.

I blog regularly here about Spring Boot, Thymeleaf,Asciidoctor and other programming related subjects.

Stay up to date with the latest content via the RSS feed, follow me on Twitter, or subscribe to the mailing list.

Recent posts

Jan 5, 2021

Using Google Charts with Thymeleaf

There are a few options to add charts to your Thymeleaf application, but one of the easiest is to integrate Google Charts. They are powerful, simple to use and free. This blog post will show how we can integrate them into a Thymeleaf/Spring Boot application.


Dec 26, 2020

Architecture Decision Records

I have been using Architecture Decision Records (ADR) documents on my latest projects. This blog post will show you what they are and how you can use them. I will also show a few examples that can serve as inspiration for your project.


Dec 21, 2020

Release Taming Thymeleaf book

I am thrilled to announce the release of my book Taming Thymeleaf on leanpub. This book aims to be a valuable resource to learn about Thymeleaf with Spring Boot.


Oct 9, 2020

Generate Leanpub TOC from Asciidoc files

I just released the first version of my Taming Thymeleaf book on leanpub. Since I am using Asciidoctor to generate the PDF, there is no automatic table of contents generation for the landing page. Luckily, leanpub allows to enter some HTML to manually create the TOC. A perfect opportunity to use my rusty Groovy skills once more to generate this HTML. I have my Asciidoc files all in a _chapters directory grouped per chapter:


Jul 20, 2020

Error handling library for Spring Boot

An important part of any decent REST API is good error handling. Good error handling has 2 major goals: It will help the developers of your API to understand exactly what is wrong when they learn to work with your API. It will allow to have the mobile app or Single Page Application or whatever that is using your app to give precise error message to the end-user of the application. We will first take a look at what Spring Boot offers out-of-the-box, and next look at how Error Handling Spring Boot Starter improves this.


Jun 8, 2020

Generate all enum values for Spring REST Docs documentation

If you document your REST API with Spring REST Docs, you have probably came across fields that refer to enum values. This little tip will show you how to automatically include all enum values in the description of the field.


May 8, 2020

AssertJ test cause of exception

AssertJ 3.16.0 has just been released. It has a feature I contributed to allow testing the (root) cause of an exception. This blog post will show how to use this to our advantage.


Apr 17, 2020

Spring Boot test slices with custom annotations

Spring Boot has first-class support for testing, both unit and integration testing. To keep your tests running fast, there is the concept of Test Slicing. By only loading the relevant part of the complete application in a test, the tests are focused and run faster since Spring does not need to load everything. This blog post will show how to use a custom annotation to ensure your unit/integration tests are all consistent with little effort.


Mar 10, 2020

Port of the Laravel Intermediate Task List tutorial to Spring Boot with Thymeleaf

Laravel is a very interesting PHP framework for building web applications. Their docs have a nice tutorial to build a task list to explain many of their concepts. This blog post basically mirrors that tutorial but shows how to build the same web application using Spring Boot and Thymeleaf.


Mar 3, 2020

UUID based Value Objects with Spring Boot REST API

The previous blog post showed how to use Value Objects with a REST API with Spring Boot. In that post, the value object used a long under the hood. This post shows an alternative using UUID objects instead.