【Java】バリデーション用の独自のアノテーションを実装したい!!実装例紹介
開発していると
独自でバリデーション用のアノテーションを実装したい!!という場面に遭遇することが多少なりともあるtだろう
「論より行動!!」という事で実装の例を紹介したと思います
今回紹介する実装例では、@StringLengthアノテーションを作成し、文字列の長さが指定された範囲内にあるかを検証します
では見ていきましょう!
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
// バリデーション用アノテーションクラスの定義
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface StringLength {
int min() default 0; // 最小の文字列長
int max() default Integer.MAX_VALUE; // 最大の文字列長
String message() default "文字列の長さが無効です"; // バリデーションエラー時のメッセージ
}
// アノテーションを使用するクラス
public class User {
@StringLength(min = 5, max = 10, message = "ユーザー名は5文字から10文字の範囲内である必要があります。")
private String username;
// コンストラクタやメソッドなど、他の部分も含まれる可能性があります
// getterとsetterは省略
}
この例では、StringLengthアノテーションが、minおよびmaxという二つのメンバーを持っています
⇒ これらのメンバーは文字列の最小および最大の長さを指定するために使用されます
また、messageメンバーはバリデーションエラー時に表示されるメッセージを指定します
ちなみにですが、UserクラスのusernameフィールドにStringLengthアノテーションが適用されていますよ
上記ではまだ、バリデーションを実行するソースは含まれていません
以下はバリデーションを行うソースです
import java.lang.reflect.Field;
public class ValidationExample {
public static void main(String[] args) {
User user = new User();
user.setUsername("TooLongUsername"); // 15文字
// バリデーションを実行
try {
validateUser(user);
System.out.println("バリデーション成功");
} catch (ValidationException e) {
System.out.println("バリデーションエラー: " + e.getMessage());
}
}
static void validateUser(User user) throws ValidationException {
// ユーザークラスのフィールドを取得
Field[] fields = User.class.getDeclaredFields();
// 各フィールドのバリデーションを実行
for (Field field : fields) {
if (field.isAnnotationPresent(StringLength.class)) {
StringLength annotation = field.getAnnotation(StringLength.class);
int minLength = annotation.min();
int maxLength = annotation.max();
String fieldValue;
try {
// フィールドの値を取得
field.setAccessible(true);
fieldValue = (String) field.get(user);
} catch (IllegalAccessException e) {
throw new ValidationException("バリデーションエラー: フィールドへのアクセスができません");
}
// 文字列の長さが範囲外の場合、例外をスロー
if (fieldValue.length() < minLength || fieldValue.length() > maxLength) {
throw new ValidationException(annotation.message());
}
}
}
}
}
class ValidationException extends Exception {
public ValidationException(String message) {
super(message);
}
}
ValidationExampleクラスでUserオブジェクトを生成し、validateUserメソッドを呼び出してバリデーションを行っています
usernameフィールドに15文字が含まれているため、バリデーションエラーが発生し、指定されたエラーメッセージが表示されるでしょう
⇓ 出力
// 以下出力
// バリデーションエラー: ユーザー名は5文字から10文字の範囲内である必要があります。
いかがでしたでしょうか?簡単ですね!
是非活用してみてください!
ではっ
是非フォローしてください
最新の情報をお伝えします