Thymeleafでバリデーションエラー発生時にエラーメッセージを出力する方法

Thymeleafでバリデーションエラー発生時にエラーメッセージを出力する方法

Thymeleafでバリデーションエラー発生時にエラーメッセージを出力する方法の実装例を以下に示します。
フォームのクラスも含めています。

コントローラー

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class FormController {

  @GetMapping("/form")
  public String showForm(Model model) {
    model.addAttribute("formData", new FormData());
    return "form";
  }

  @PostMapping("/form")
  public String submitForm(@Validated @ModelAttribute("formData") FormData formData, BindingResult bindingResult, Model model) {
    if (bindingResult.hasErrors()) {
      return "form";
    }
    return "success";
  }
}

フォームのクラス

import javax.validation.constraints.NotEmpty;

public class FormData {

  @NotEmpty(message = "名前を入力してください")
  private String name;

  // GetterとSetter
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

フォームのビュー (form.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <title>フォーム</title>
</head>
<body>
  <form th:action="@{/form}" th:object="${formData}" method="post">
    <div>
      <label for="name">名前:</label>
      <input type="text" id="name" th:field="*{name}" />
      <div th:if="${#fields.hasErrors('name')}" th:errors="*{name}">エラーメッセージ</div>
    </div>
    <div>
      <button type="submit">送信</button>
    </div>
  </form>
</body>
</html>

成功ページのビュー (success.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <title>成功</title>
</head>
<body>
  <h1>フォームの送信に成功しました!</h1>
</body>
</html>

上記のコードでは、FormDataクラスに@NotEmptyアノテーションを付けて名前の入力を必須にしています。
FormControllerクラスでは、バリデーションエラーが発生した場合に同じフォームページを再表示し、Thymeleafテンプレートでエラーメッセージを表示します。