【Spring Boot】Validation の基本をやさしく解説

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

Spring Boot の API を作っていると、
入力チェック(Validation) は避けて通れません。

  • 必須チェック
  • 文字数チェック
  • メール形式チェック
  • 数値の範囲チェック

こういった“形式的なチェック”を簡単に実現してくれるのが
Validation(Bean Validation) です。

この記事では、Validation の基本を
やさしく・実務寄り で整理していきます。

まずはコードから見ていきましょう。


Validation とは

一言でいうと、

「DTO にアノテーションを付けるだけで入力チェックを自動化する仕組み」

です。

  • @NotBlank
  • @Email
  • @Min
  • @Size

などのアノテーションを付けるだけで、
Controller に届く前にチェックしてくれます。


まずは基本のコードを確認

リクエスト DTO

Java
public class UserRequest {

    @NotBlank(message = "名前は必須です")
    private String name;

    @Min(value = 0, message = "年齢は 0 以上を指定してください")
    private int age;
}

Controller

Java
@PostMapping("/users")
public UserResponse create(@Valid @RequestBody UserRequest request) {
    return service.create(request);
}

@Valid を付けるだけで、
DTO のアノテーションが自動でチェックされます。


よく使う Validation アノテーション

必須チェック

Java
@NotBlank
@NotNull

文字数チェック

Java
@Size(min = 3, max = 20)

数値チェック

Java
@Min(0)
@Max(100)

メール形式

Java
@Email

パターンチェック

Java
@Pattern(regexp = "^[0-9]{4}$")

Validation が動く仕組みをふわっと理解する

Controller の @Valid がトリガー

Java
@Valid @RequestBody UserRequest request

DTO のアノテーションをチェック

@NotBlank や @Min を確認します。

エラーがあれば例外を投げる

MethodArgumentNotValidException が発生します。

ControllerAdvice でキャッチして整形

例外ハンドリングと組み合わせると最強です。


Validation が動かないときの原因

@Valid を付け忘れている

最も多いパターンです。

DTO の getter/setter がない

Lombok の @Data を付け忘れているケース。

ControllerAdvice がない

エラーがそのまま返ってしまう。

フィールド名が JSON と一致していない

DTO のマッピングに失敗しているパターン。


実務でよくある Validation の使い方

リクエスト DTO の形式チェック

  • 必須
  • 文字数
  • メール形式
  • 数値の範囲

Service 層で業務的なチェック

Java
if (user.isDeleted()) {
    throw new BusinessException("退会済みユーザーです");
}

形式的なチェック → Controller
業務的なチェック → Service
という分離が大切です。


Validation をもっと活かすポイント

message を丁寧に書く

ユーザーに優しい API になります。

groups を使って条件ごとにチェックを変える

高度な Validation が可能です。

カスタムバリデーションを作る

独自ルールも実装できます。


まとめ

Validation は、
「DTO にアノテーションを付けるだけで入力チェックを自動化する仕組み」
です。

  • @Valid を Controller に付ける
  • DTO にアノテーションを書く
  • 形式的なチェックは Validation
  • 業務的なチェックは Service
  • ControllerAdvice と組み合わせると最強

難しく聞こえますが、
「形式チェックは DTO に書く」
と理解できれば十分です。


decopon
decopon

Validation を理解すると、
Controller のコードが一気にきれいになります。
入力チェックが整理されるだけで、
API の品質もぐっと上がります。
あなたの開発が、今日より少しだけ楽になりますように。

moco
moco

“ちゃんと入力してね”って優しく見守ってくれる感じ…
Validation さん、すてきだね。

コメント

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