色々やり方はあると思いますが、例えばrejectValueで作ることができます。
java
1@PostMapping("/form")
2public String post(@Validated Product product, BindingResult result) {
3 if (result.hasErrors()) {
4 return "form";
5 }
6 // validateで何らかの精査処理が走る場合
7 if (businessLogic.validate(product)) {
8 result.rejectValue("content", "error.content", "ビジネスロジックのエラーです");
9 return "form";
10 }
11 return "index";
12}
HTML側は、th:errorclassを使うとエラー時に(classが追加され)背景色を変更できます。
html
1<!DOCTYPE html>
2<html xmlns:th="http://www.thymeleaf.org">
3<head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6 <style>
7 .is-invalid {
8 background-color: #fee2e2;
9 }
10 .is-invalid-text {
11 color: red;
12 }
13 </style>
14</head>
15<body>
16 <form th:action="@{/form}" th:object="${product}" method="post">
17 <input type="text" th:field="*{content}" th:errorclass="is-invalid">
18 <button>登録</button>
19 <br>
20 <small th:errors="*{content}" class="is-invalid-text"></small>
21 </form>
22</body>
23</html>
■その他
以下は、その他のサンプルとなります。例えば、アノテーションを自作する場合は「@interface バリデーション名」で作成できます。
java
1@Getter
2@Setter
3@Entity
4public class Product {
5 @Id
6 @GeneratedValue
7 private Long id;
8
9 @NotBlank
10 //@Custom 自作バリデーションを作る場合
11 private String content;
12}
13
14@Retention(RetentionPolicy.RUNTIME)
15@Target(ElementType.FIELD)
16@Constraint(validatedBy = CustomValidator.class)
17public @interface Custom {
18 // 省略
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/12/10 08:32
2023/12/10 13:22 編集
2023/12/11 02:40
2023/12/11 11:32