1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【SpringBoot2】自作アノテーションの作成と入力チェックについて

Last updated at Posted at 2021-10-25

はじめに

この記事はSTSを利用した自作アノテーションの作成方法を記したものです。
以下のバージョンでの動作を確認しています。

  • Pleiades All in One Eclipse 2021
  • Spring Tool Suite (STS) 4.12.0

今回は「正しいタイムスタンプ形式かどうか」をチェックする自作アノテーションを作成してみたいと思います。

注釈(アノテーション)型の作成

  1. 「Ctrl + N」もしくは、「ファイル → 新規 → その他」からウィザードを立ち上げます

  2. Javaの項目の注釈型を選択し、次へを選択します。
    image.png

  3. 名前を記載してください。バリデーション名になるため何を入力チェックするのかが分かりやすいモノであるべきでしょう。

  4. @Rententionとはアノテーションが影響する範囲です。

  5. @Targetとはアノテーションをつける対象。いわゆる入力チェックを行う対象となります。

image.png

アノテーションの中身

アノテーションとロジックの2クラス作成する必要があります。

DateValid.java
@Documented
@Retention(RUNTIME)
@Target(FIELD)
// アノテーションで制約(チェック)したい具体的なロジックを記述したクラスを指定
@Constraint(validatedBy = {DateValidImp.class})
public @interface DateValid {
  String message() default "{0}は日付時刻として許可された形式ではありません。";
  Class<?>[] groups() default {};

  Class<? extends Payload>[] payload() default {};

  @Target({ FIELD })
  @Retention(RUNTIME)
  @Documented
  public @interface List {
     DateTime[] value();
  }
}

ウィザードで設定した項目でコードが生成されているはずです。
@Constraintや@ groups()`は生成できないので追記してください。

DateValidImp.java
public class DateValidImp implements ConstraintValidator<DateValid, String> {

	private static final String FORMAT = "yyyy/MM/dd HH:mm:ss";

	@Override
	public void initialize(DateValid constraintAnnotation) {
	}

	@Override
	public boolean isValid(String value, ConstraintValidatorContext context) {
		if(value == null || value.isEmpty()) {
			return true;
		}
		try {
			DateTimeFormatter dtf = DateTimeFormatter.ofPattern(FORMAT);
			dtf.format(LocalDateTime.parse(value, dtf));
			return true;
		} catch(DateTimeException e) {
			return false;
		}
	}

}

こちらは入力チェック部分であるロジックを定義する部分です。
isValidメソッドのvalueが対象フィールドの値となります。
あとはどのようにtrueとfalseにするかを考えればよいと言うことです。

Formからの呼び出し

requestForm

	/** 登録日時 */
	@NotEmpty
	@DateTime
	private String insertTimestamp;

呼び出し方は、@Targetの引数に合わせる必要がありますが、今回はFIELDを指定しているため、上記の記述で実行時にチェックされます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?