【Java】オブジェクトをValidationする
はじめに
お世話になってます、hosochinです
今回は
「Javaのオブジェクトをバリデーションしてみる」
です
入力値のバリデーションというよりかは、例えばDBからデータを取得後に加工したあとのオブジェクトとかをバリデーションするイメージでやっていこうと思います👍
動かしてみる
- オブジェクトクラス
@AllArgsConstructor
@Getter
public class SampleObject {
@NotNull
private String id;
@NotNull
private String name;
}
- バリデーションを実行するメソッド
/**
* オブジェクトをバリデーションするメソッド
*/
private void validation(Object obj) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
// バリデーションの実行
Set<ConstraintViolation<Object>> results = validator.validate(obj);
// 結果をログに出力
results.forEach(this::outputLog);
}
/**
* ログ出力
*/
private void outputLog(ConstraintViolation<Object> result) {
System.out.println(
"propertyPath: " + result.getPropertyPath()
+ ", message: " + result.getMessage());
}
- バリデーションを呼ぶ
public void check() {
// idはnullを設定しとく
SampleObject sampleObject = new SampleObject(null, "name");
validation(sampleObject);
}
- build.gradle
// 省略
dependencies {
// 以下を追加しておく
implementation 'org.hibernate.validator:hibernate-validator:6.1.5.Final'
implementation 'jakarta.validation:jakarta.validation-api:2.0.2'
// 省略
}
- 実行結果
propertyPath: id, message: null は許可されていません
はい、意図した通りの結果が得られましたね🍺
sampleObject.idはnullを設定しましたが、SampleObjectクラスでidはNotNullとなっているので引っかかりました
Collectionや他のオブジェクトをフィールドに持つ場合
collectionや他のオブジェクトの変数については、@Validアノテーションをつけてやらないと検証されないので注意です
@AllArgsConstructor
@Getter
public class SampleObject {
@NotNull
private String id;
@NotNull
private String name;
@Valid // ←これつけないとsubIdの検証がされない
private List<SubSampleObject> list;
@Valid // ←これつけないとsubIdの検証がされない
private SubSampleObject subSampleObject;
@AllArgsConstructor
public static class SubSampleObject {
@NotNull
private String subId;
}
}
ディスカッション
コメント一覧
まだ、コメントがありません