カテゴリ: Micronaut 更新日: 2026/02/20

MicronautのValidation AOPで入力チェックを自動化する方法

MicronautのValidation AOPで入力チェックを自動化する方法
MicronautのValidation AOPで入力チェックを自動化する方法

先生と生徒の会話形式で理解しよう

生徒

「Micronautでフォーム入力やAPIリクエストの値を自動でチェックする方法はありますか?」

先生

「はい、MicronautではValidation AOPを使うと、アノテーションを付けるだけで入力値のバリデーションを自動化できます。」

生徒

「AOPを使うとどうして自動でチェックできるんですか?」

先生

「AOPはメソッドの呼び出し前に処理を挟むことができます。バリデーションアノテーションがついたパラメータやメソッドを呼ぶ前に、自動的にチェックが行われる仕組みです。」

1. Validation AOPとは?

1. Validation AOPとは?
1. Validation AOPとは?

MicronautのValidation AOPは、メソッドやパラメータに付与したバリデーションアノテーションをもとに、入力値が正しいかを自動で検証する仕組みです。これにより、個別にバリデーションコードを書く必要がなくなり、コードがシンプルになり、保守性も向上します。

2. 基本的なバリデーションアノテーション

2. 基本的なバリデーションアノテーション
2. 基本的なバリデーションアノテーション

Micronautではjavax.validationのアノテーションを利用できます。代表的なものとして@NotNullや@Size、@Min、@Maxがあります。これらを使うことで、簡単に入力チェックを実装できます。


import jakarta.inject.Singleton;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

@Singleton
public class UserService {

    public void registerUser(@NotNull @Size(min = 3, max = 20) String username) {
        // ユーザー登録処理
    }
}

3. メソッド単位でのバリデーション有効化

3. メソッド単位でのバリデーション有効化
3. メソッド単位でのバリデーション有効化

Micronautでは@Validatedアノテーションをクラスやメソッドに付与することで、Validation AOPが有効になります。これにより、バリデーションアノテーションが付いたパラメータに対して自動チェックが行われます。


import io.micronaut.validation.Validated;
import jakarta.inject.Singleton;
import jakarta.validation.constraints.Min;

@Singleton
@Validated
public class OrderService {

    public void placeOrder(@Min(1) int quantity) {
        // 注文処理
    }
}

4. バリデーション失敗時の挙動

4. バリデーション失敗時の挙動
4. バリデーション失敗時の挙動

入力値が指定した条件を満たさない場合、Validation AOPが自動的に例外ConstraintViolationExceptionをスローします。これにより、メソッド内部の処理は実行されず、リクエストは失敗として扱われます。


try {
    userService.registerUser(""); // ユーザー名が空なので失敗
} catch (jakarta.validation.ConstraintViolationException e) {
    e.getConstraintViolations().forEach(v -> System.out.println(v.getMessage()));
}

5. DTOクラスを使った入力チェック

5. DTOクラスを使った入力チェック
5. DTOクラスを使った入力チェック

複数のパラメータをまとめてバリデーションしたい場合はDTOクラスを作成してアノテーションを付与します。メソッドにはDTOを受け取る形にすると、Validation AOPが自動でチェックします。


import jakarta.validation.constraints.NotBlank;

public class CreateUserRequest {
    @NotBlank
    private String name;

    @NotBlank
    private String email;

    // getter, setter
}

@Singleton
@Validated
public class UserController {

    public void createUser(CreateUserRequest request) {
        // バリデーション済みのユーザー情報で処理
    }
}

6. RESTコントローラでの自動バリデーション

6. RESTコントローラでの自動バリデーション
6. RESTコントローラでの自動バリデーション

MicronautのHTTPコントローラでは、@Bodyで受け取ったリクエストDTOにValidation AOPが自動適用されます。入力が不正な場合は400 Bad Requestとしてレスポンスが返されます。


import io.micronaut.http.annotation.*;

@Controller("/users")
@Validated
public class UserHttpController {

    @Post("/")
    public void create(@Body CreateUserRequest request) {
        // バリデーション済みのリクエストで処理
    }
}

7. カスタムバリデータの作成

7. カスタムバリデータの作成
7. カスタムバリデータの作成

標準アノテーションだけでは足りない場合、独自のカスタムバリデータを作成してValidation AOPで使用することも可能です。これにより複雑なルールにも対応できます。


import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;

@Documented
@Constraint(validatedBy = CheckPasswordValidator.class)
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckPassword {
    String message() default "パスワードが無効です";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

8. Validation AOPのメリット

8. Validation AOPのメリット
8. Validation AOPのメリット

Validation AOPを活用すると、入力チェックの重複コードが不要になり、メソッド呼び出し前に自動でバリデーションが行われます。これにより、開発者はビジネスロジックに集中でき、コードの可読性と保守性が向上します。

カテゴリの一覧へ
新着記事
New1
Micronaut
Micronautの@Factoryとは?複雑なBean生成を管理するための方法を解説
New2
Quarkus
QuarkusのDIとCDIを完全理解!@Producesでプロデューサーメソッドを使う方法を初心者向けに解説
New3
Java
JavaのStringBufferクラスを徹底解説!スレッド安全な文字列操作の仕組みと使い分け
New4
Micronaut
Micronautで非同期HTTP処理を行う方法!リアクティブ対応の基礎知識
人気記事
No.1
Java&Spring記事人気No1
Quarkus
Quarkus入門!GitHub ActionsでCI/CDパイプラインを構築して自動ビルドを実現する方法
No.2
Java&Spring記事人気No2
Java
Javaのコンパイルと実行の流れを解説!JVM・JDK・JREの違いも初心者向けに整理
No.3
Java&Spring記事人気No3
Quarkus
QuarkusのCI/CD入門!GitHub Actionsで自動デプロイを実現する方法
No.4
Java&Spring記事人気No4
Micronaut
Micronautのルーティング設定ガイド!プレフィックス付与とAPIバージョニングの基本
No.5
Java&Spring記事人気No5
Micronaut
Micronautのフィルタ徹底解説!HTTPリクエスト共通処理をスマートに追加する方法
No.6
Java&Spring記事人気No6
Java
Java Optional ifPresentの使い方を徹底解説!nullチェックをスマートに省略する方法
No.7
Java&Spring記事人気No7
Java
Java Functionインタフェースの使い方を完全ガイド!map変換と処理チェーンを理解する
No.8
Java&Spring記事人気No8
Java
JavaのString比較を徹底解説!equalsと==の違い、初心者が陥る罠とは?