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だとなんか異様に感動するな


