概要
Bean Validationを使う機会があったのでちょっと調べました。
@sizeは@lengthでも代用できますが、@lengthはHibernate固有のバージョンのようです。
なので@sizeを使用するほうが移植性は高くなります。
Bean Validation用アノテーション一覧
- 必須入力バリデーション
- @NotBlank
- 数値範囲(最大)バリデーション
- @DecimalMax
- @Max
- 数値範囲(最小)バリデーション
- @DecimalMin
- @Min
- 最小/最大桁数範囲バリデーション
- @Size
- Eメールバリデーション
- 正規表現
- @Pattern(regexp = "正規表現")
※正規表現は「[よく使う正規表現一覧]」(https://kobe-systemdesign.work/2021/01/07/%e3%82%88%e3%81%8f%e4%bd%bf%e3%81%86%e6%ad%a3%e8%a6%8f%e8%a1%a8%e7%8f%be%e4%b8%80%e8%a6%a7/ "こちら")を参照!
専用の検証アノテーションに思うこと
用意されている個別のアノテーションについては、値の必須が前提の気がします。
これを使用する場合は「未入力」という状態を値で明示的にやり取りする必要がある気がします。
でないと絶対チェックエラーになるのですが。。。何か回避する方法あります?
なので結局
private String num;
@AssertTrue(message = "{key}")
public boolean isValidNumber() {
if (StringUtils.isEmpty(num)) {
return false;
}
String regex = "^\\d{4}+$" ;
Matcher matcher = Pattern.compile(regex).matcher(num);
return matcher.matches();
}
入力されていたらチェックするということをやりたい場合は@AssertTrue
を使うことになります。
未入力をnullやブランクで表現する場合は、もうこれ使う以外に道が無い気がしますが、どうなのでしょうね。
コメント