SpringBootにおいてバリデーションを利用するとき
よくお世話になるバリデーション用アノテーションを紹介する。
nullチェック系
@javax.validation.constraints.Null
値がnull
であることをチェックする。
@javax.validation.constraints.NotNull
値がnull
ではないことをチェックする。
フォームの空欄は、「空の文字列」としてみなされるため、
空欄判定でこのアノテーションはおすすめしない。
@org.hibernate.validator.NotEmpty
値がnull
または空白だった場合エラーにする。
未入力を防ぐような時に用いる。
日付判定系
具体的にはDate
、Calendar
およびそのサブクラスなどを保管する項目で用いる。
@javax.validation.constraints.Future
日付に関するオブジェクトで利用する。
現在より先(未来)の日時のみを受け付けるようにする。
@javax.validation.constraints.Past
日付に関するオブジェクトで利用し、
現在より前(過去)の日時のみを受け付けるようにする。
数値の判定系
@javax.validation.constraints.Min, @javax.validation.constraints.Max
基本的な最小値、最大値判定。数値にのみ利用する。
@org.hibernate.validator.Range
引数に最小値、最大値を指定し、一定範囲内の値のみを入力できるようにする。
上記のmin,maxを同時に利用するときはこちらをおすすめする。
例:@Range(min=10, max=100)
文字列の判定系
@javax.validation.constraints.Size
これは文字列だけではなく、配列、コレクションなどいくつもの値をまとめて保管するオブジェクトで使われる。
そのオブジェクトに保管されている要素数を指定する。
Stringの要素数はすなわちlength(文字数)のことである。
引数に最小値、最大値を指定して利用する。
例:@Size(min=1, max=10)
@org.hibernate.validator.Length
Stringの値に利用され、文字列の長さ(文字数)の範囲を指定する。
引数によって最小値、最大値を指定する。
例:@Length(min=5, max=10)
@javax.validation.constraints.Pattern
Stringの値で利用し、正規表現でバリデーションをかける。
引数に正規表現のパターンを指定する。
他のアノテーションで賄えない、特殊なバリデーションを行いたい時に有効。
例:@Pattern(regexp="[a-zA-Z]+")
共通する引数
(全て検証していないが)ほとんどのアノテーションにはmessage
という引数を追加することができる。
これを追加すると、バリデーションによってエラーになった際、
このメッセージを出力するようになる。
例:@NotEmpty(message = "空白は不可です")
まとめ
ここではよく使いがちな単純なアノテーションを紹介した。
ユーザーが入力することのできる値は、
できるだけバリデーションをかけておくことでバグを生みにくいプログラムを作成することができる。