JJUG CCC 2024 Springで"知名度は高くないけど便利なJavaライブラリ集"について話しました。
スライド
以下の4つライブラリを紹介しました。このブログの実装にも全て使用しています。
なお、知名度は以下の通りでした。自分のXフォロワー周辺に聞いているので、自分が作っているYAVIについては流石に知名度が高めでした😅
- Jilt
- YAVI
- Logbook
- NullAway
セッションの最後の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
ご清聴ありがとうございました。