結論
ecuacion-lib-validation と言うライブラリの @StringWhen などの validator では、「別の項目の値が空欄の場合」にのみ Jakarta Validation で検証する機能があります、と言うお話。
はじめに
ショッピングサイトの注文フォームで、「配送先住所」が未入力の場合は「受け取り方法」が「店頭受け取り」でなければならない、なんてケースを想像してみます。
こういった、別の項目が空欄の場合のチェック、service クラスに if 文を連ねる代わりに、validator でサクッと実装してみませんか?
@StringWhen
ecuacion-lib-validation というlibraryの @XxxWhen にはこの機能があります。
ここでは @StringWhen を使用します。
こんな形で指定します。
@StringWhen(propertyPath = "deliveryType", string = {"STORE_PICKUP"},
conditionPropertyPath = "deliveryAddress", conditionValue = ConditionValue.EMPTY)
public record OrderInfo(String deliveryAddress, String deliveryType) {
}
propertyPath という名称は、Jakarta Validation において field を特定する記述方法を表します。普通に field 名を書けばOKです。
見れば大体わかるとは思いますが一応説明すると、、、そもそもが英語なので英語で^^;
propertyPath (= deliveryType) is String (= "STORE_PICKUP") When conditionPropertyPath (= deliveryAddress) is conditionValue (= EMPTY).
deliveryAddress が EMPTY(空欄)のときだけ、deliveryType が "STORE_PICKUP" であることを検証するよ、と言うことですね。
ecuacion-lib-validation の導入方法
導入方法については下記記事をご参照ください。
基本的な使い方
validation 対象として、まずはこちらの OrderInfoWithMessage.java を使用します。
@StringWhen(propertyPath = "deliveryType", string = "STORE_PICKUP",
conditionPropertyPath = "deliveryAddress", conditionValue = ConditionValue.EMPTY,
message = "配送先住所が未入力の場合は受け取り方法は「店頭受け取り」でなければなりません。")
public record OrderInfoWithMessage(String deliveryAddress, String deliveryType) {
}
そして、validation を実行する側のコードはこちら。
以下メソッドは単純に main メソッドから呼び出しています。以下同様。
private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
public static void 基本的な使い方() {
OrderInfoWithMessage order = new OrderInfoWithMessage(null, "HOME_DELIVERY");
Set<ConstraintViolation<OrderInfoWithMessage>> set = validator.validate(order);
for (ConstraintViolation<?> v : set) {
System.out.println(v.getMessage());
}
}
deliveryAddress が null(空欄)にもかかわらず deliveryType が "HOME_DELIVERY" なのでエラーになります。これを実行すると以下のメッセージが出力されます。
配送先住所が未入力の場合は受け取り方法は「店頭受け取り」でなければなりません。
その他
その他の使用方法、when の条件、@StringWhen 以外の validator の一覧などは、以下をご参照ください。
サンプルコード
サンプルコードは以下です。
https://github.com/ecuacion-jp/ecuacion-code-snippets/tree/main/ecuacion-lib-validation-StringWhen
※このページから直接ソースの zip を download はできないと思うので、そのページにある ecuacion-code-snippets のリンクをクリックし、そこにある緑の <> Code ボタンから Download ZIP で download してください。
本サンプルのフォルダに移動後、mvn compile exec:java で実行できます。
まとめ
Jakarta Validation を使用し「別の項目の値が空欄の場合」のみ検証を実施する、@StringWhen など @XxxWhen のご紹介でした。