はじめに
Spring Boot の API を作っていると、
入力チェック(Validation) は避けて通れません。
- 必須チェック
- 文字数チェック
- メール形式チェック
- 数値の範囲チェック
こういった“形式的なチェック”を簡単に実現してくれるのが
Validation(Bean Validation) です。
この記事では、Validation の基本を
やさしく・実務寄り で整理していきます。
まずはコードから見ていきましょう。
Validation とは
一言でいうと、
「DTO にアノテーションを付けるだけで入力チェックを自動化する仕組み」
です。
- @NotBlank
- @Min
- @Size
などのアノテーションを付けるだけで、
Controller に届く前にチェックしてくれます。
まずは基本のコードを確認
リクエスト DTO
public class UserRequest {
@NotBlank(message = "名前は必須です")
private String name;
@Min(value = 0, message = "年齢は 0 以上を指定してください")
private int age;
}Controller
@PostMapping("/users")
public UserResponse create(@Valid @RequestBody UserRequest request) {
return service.create(request);
}@Valid を付けるだけで、
DTO のアノテーションが自動でチェックされます。
よく使う Validation アノテーション
必須チェック
@NotBlank
@NotNull文字数チェック
@Size(min = 3, max = 20)数値チェック
@Min(0)
@Max(100)メール形式
@Emailパターンチェック
@Pattern(regexp = "^[0-9]{4}$")Validation が動く仕組みをふわっと理解する
Controller の @Valid がトリガー
@Valid @RequestBody UserRequest requestDTO のアノテーションをチェック
@NotBlank や @Min を確認します。
エラーがあれば例外を投げる
MethodArgumentNotValidException が発生します。
ControllerAdvice でキャッチして整形
例外ハンドリングと組み合わせると最強です。
Validation が動かないときの原因
@Valid を付け忘れている
最も多いパターンです。
DTO の getter/setter がない
Lombok の @Data を付け忘れているケース。
ControllerAdvice がない
エラーがそのまま返ってしまう。
フィールド名が JSON と一致していない
DTO のマッピングに失敗しているパターン。
実務でよくある Validation の使い方
リクエスト DTO の形式チェック
- 必須
- 文字数
- メール形式
- 数値の範囲
Service 層で業務的なチェック
if (user.isDeleted()) {
throw new BusinessException("退会済みユーザーです");
}形式的なチェック → Controller
業務的なチェック → Service
という分離が大切です。
Validation をもっと活かすポイント
message を丁寧に書く
ユーザーに優しい API になります。
groups を使って条件ごとにチェックを変える
高度な Validation が可能です。
カスタムバリデーションを作る
独自ルールも実装できます。
まとめ
Validation は、
「DTO にアノテーションを付けるだけで入力チェックを自動化する仕組み」
です。
- @Valid を Controller に付ける
- DTO にアノテーションを書く
- 形式的なチェックは Validation
- 業務的なチェックは Service
- ControllerAdvice と組み合わせると最強
難しく聞こえますが、
「形式チェックは DTO に書く」
と理解できれば十分です。

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

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

コメント