[SpringBoot2.4.3] PhoneValidatorクラスの作成

PhoneValidator.java

package com.example.demo;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class PhoneValidator implements ConstraintValidator<Phone, String>{
	
	@Override
	public void initialize(Phone phone) {
		
	}
	
	@Override
	public boolean isValid(String input, ConstraintValidatorContext cxt) {
		if(input == null) {
			return false;
		}
		return input.matches("[0-9()-]*");
	}
}

### アノテーションクラス
validation classのためのアノテーションは色々用意しなければならない。

package com.example.demo;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;
import javax.validation.ReportAsSingleViolation;

@Documented
@Constraint(validatedBy = PhoneValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@ReportAsSingleViolation
public @interface Phone {
	
	String message() default "please input a phone number.";
	
	Class<?>[] groups() default {};
	
	Class<? extends Payload>[] payload() default{};

}

### Phoneバリデータの使用
MyData.java

	@Column(nullable = true)
	@Phone
	private String memo;

html

		<tr>
			<td><label for="memo">メモ</label></td>
			<td><textarea name="memo" th:text="*{memo}" cols="20" rows="5"  th:errorclass="err"></textarea>
			<div th:if="${#fields.hasErrors('memo')}" th:errors="*{memo}" th:errorclass="err">
			</div></td>
		</tr>

おおお、javaだとなんか異様に感動するな