@NotNull、@NotBlank、@NotEmptyの違いは?【初心者向け】

こんにちは!今回は、Javaのバリデーションでよく使われるアノテーション「@NotNull」「@NotBlank」「@NotEmpty」について、詳しく解説します。それぞれの違いや使いどころ、実際の使い方を紹介していきますので、これらを初めて使う方や、しっかり理解したい方に役立つ内容です。


1. @NotNullとは?

@NotNullは、対象のフィールドが「nullであってはならない」ことを強制するアノテーションです。つまり、オブジェクトが必ず存在することを保証しますが、そのオブジェクトが空かどうかは関与しません。

例:

public class User {
    @NotNull
    private String username;
}

このコードでは、usernameフィールドがnullである場合にバリデーションエラーになります。ただし、空の文字列("")や空のコレクションは許されます。


2. @NotBlankとは?

@NotBlankは、文字列専用のアノテーションです。対象のフィールドが「nullでも、空文字列でも、空白でもあってはならない」ことを強制します。

例:

public class User {
    @NotBlank
    private String username;
}

このコードでは、usernamenull、空文字列("")、または空白文字(" "など)を持つ場合にバリデーションエラーとなります。空白を除外するため、ユーザー名などのフィールドに使うのが一般的です。


3. @NotEmptyとは?

@NotEmptyは、文字列やコレクション(リストや配列など)で使われます。「nullであってはならず、さらに空であってもいけない」ことを強制します。

例:

public class Group {
    @NotEmpty
    private List<String> members;
}

このコードでは、membersnullや空のリストの場合にバリデーションエラーとなります。@NotEmptyは、空の文字列や空のコレクションを許さない点で@NotNullよりも厳しい制約を課します。


違いを整理!

  • @NotNull:null禁止。空文字や空コレクションは許される。
  • @NotBlank:null、空文字、空白禁止。文字列専用。
  • @NotEmpty:null、空文字、空のコレクション禁止。

4. 実際の使い方

では、これらを使ってみましょう。ユーザー情報のバリデーションを例に、@NotNull、@NotBlank、@NotEmptyを活用します。

サーバー側のコード:

public class User {
    @NotNull(message = "ユーザーIDは必須です")
    private Long id;

    @NotBlank(message = "ユーザー名は空白にできません")
    private String username;

    @NotEmpty(message = "メールアドレスリストは空にできません")
    private List<String> emails;
    
    // ゲッターとセッター
}

このコードでは、idnullであればエラーが発生し、usernameが空白や空文字であればエラーが出ます。さらに、emailsフィールドが空であれば、リストにメールアドレスが登録されていないとみなされます。


5. バリデーションエラーの処理

これらのアノテーションを使用すると、エラーが発生した場合は自動的にエラーメッセージが返されます。コントローラでのエラーハンドリングも重要です。

@PostMapping("/users")
public ResponseEntity<String> createUser(@Valid @RequestBody User user, BindingResult result) {
    if (result.hasErrors()) {
        return ResponseEntity.badRequest().body(result.getAllErrors().toString());
    }
    // ユーザー作成処理
    return ResponseEntity.ok("ユーザーが作成されました");
}

@Validアノテーションを使って、リクエストボディに対するバリデーションが行われます。エラーがある場合は、BindingResultを使ってエラーメッセージを取得します。


6. 他のバリデーションアノテーションと組み合わせる

@NotNull、@NotBlank、@NotEmptyは、他のバリデーションアノテーション(例:@Size@Email)と組み合わせることで、さらに厳密な制約を設けることが可能です。

public class User {
    @NotNull
    @Size(min = 1, max = 20, message = "ユーザー名は1文字以上20文字以下です")
    private String username;
    
    @Email(message = "メールアドレスの形式が正しくありません")
    private String email;
}

おわりに

@NotNull、@NotBlank、@NotEmptyは、どれもJavaのバリデーションにおいて非常に重要な役割を果たします。それぞれの使いどころを理解することで、より厳密で効率的なデータ検証が可能になります。これを機に、実際にプロジェクトで使ってみてください!

もっと詳しく知りたい方は、Spring公式ドキュメントを見てみてくださいね。

他の記事が見たい方はこちら!↓↓↓

@Primaryの使い方と引数を徹底解説!【初心者向け】

@PathVariableの使い方と引数を徹底解説!【初心者向け】

@RequestBodyの使い方と引数を徹底解説!【初心者向け】

@RequestParamの使い方と引数を徹底解説!【初心者向け】

@RestControllerの使い方と引数を徹底解説!【初心者向け】

タイトルとURLをコピーしました