Programming > Java > am > ik > yavi
Jun 17, 2024
Jun 17, 2024
N/A Views
MD

JJUG CCC 2024 Springで"知名度は高くないけど便利なJavaライブラリ集"について話しました。

スライド

以下の4つライブラリを紹介しました。このブログの実装にも全て使用しています。

なお、知名度は以下の通りでした。自分のXフォロワー周辺に聞いているので、自分が作っているYAVIについては流石に知名度が高めでした😅

  • Jilt
    image
  • YAVI
    image
  • Logbook
    image
  • NullAway
    image

セッションの最後のQ&Aでは、"YAVIはプレゼン層で利用する想定か?"と聞かれました。

サンプルはわかりやすくするため、プレゼン層で利用する例を上げましたが、どちらかというとドメイン側で利用する想定です。
そのため、ドメイン側で定義したValidatorをプレゼン用に変換することを想定した機能
も用意しています。

サンプル。次のUserクラスで定義したValidator

import am.ik.yavi.arguments.Arguments3Validator;
import am.ik.yavi.validator.Yavi;

import static am.ik.yavi.constraint.charsequence.codepoints.AsciiCodePoints.ASCII_PRINTABLE_CHARS;

public record User(String name, String email, Integer age) {

    public static final Arguments3Validator<String, String, Integer, User> validator = Yavi.arguments()
            ._string("name", c -> c.notBlank().lessThanOrEqual(20).codePoints(ASCII_PRINTABLE_CHARS).asWhiteList())
            ._string("email", c -> c.notBlank().lessThanOrEqual(50).email())
            ._integer("age", c -> c.notNull().greaterThanOrEqual(0).lessThanOrEqual(200))
            .apply(User::new);

}

を、UserFormクラスのバリデーションに使いたい時、

import am.ik.yavi.arguments.Arguments;
import am.ik.yavi.core.ValueValidator;
import com.example.yavi.domain.User;
import jakarta.annotation.Nullable;

public record UserForm(@Nullable String name, @Nullable String email, @Nullable Integer age) {
    static ValueValidator<UserForm, User> validator = User.validator
            .compose(userForm -> Arguments.of(userForm.name(), userForm.email(), userForm.age()));

}

という風にUserFormを受けて、Userを返すValidatorに変換できます。

UserForm userForm = ...;

Validated<User> userValidated = UserForm.validator.validate(userForm);

という形で使えます。 全ソースコードはこちらです https://github.com/making/demo-spring-mvc-yavi

発表後にJilt 1.6がリリースされ、新たにFunctional Buildersがサポートされました。

https://github.com/skinny85/jilt/issues/17

ご清聴ありがとうございました。

Found a mistake? Update the entry.
Share this article: