AIによる要約
@ValidはBean Validation標準の入力チェック、@ValidatedはSpringが提供する検証用アノテーションです。初学者はまずFormやRequest DTOに@Validを使い、グループバリデーションやメソッド引数の検証が必要なときに@Validatedを検討すると整理しやすいです。
リーダブルコード
コードレビューの「読みづらい」を減らす、最初の一冊。
命名、コメント、条件分岐、変数、メソッド分割を短い実例から学べます。Java専用書ではありませんが、現場で使える読みやすさの判断基準が身につきます。
- レビュー指摘の理由と直し方を整理したい
- 動くだけでなく、読みやすいコードを書きたい
当サイトはAmazonアソシエイト・プログラムの参加者です。価格・在庫・配送条件はAmazonでご確認ください。


Spring Bootで入力チェックを調べると、@Validと@Validatedの両方が出てきます。
どちらも入力チェックに関係するため、初学者は違いが分からず、プロジェクト内で何となく使われている方を真似しがちです。現場では、その真似がレビューで止まることがあります。
この記事のポイント
@Validは標準的なBean Validationの入口として使う@ValidatedはSpringの検証機能で、グループ指定などに使える- 普通のForm入力ならまず
@Validで考える - 既存プロジェクトの方針に合わせることも重要
@Validは標準的な入力チェックとして使う
@Validは、Bean Validationの仕組みを使って、FormクラスやRequest DTOに付けた制約を検証します。
public class UserRegisterForm {
@NotBlank
private String name;
@NotBlank
@Email
private String email;
}
@PostMapping("/users")
public String register(@Valid UserRegisterForm form,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "users/new";
}
userService.register(form);
return "redirect:/users";
}
通常の登録フォームやJSON入力では、まずこの形を理解すれば十分です。必須、桁数、メール形式などの基本的なチェックは@Validで扱えます。
@ValidatedはSpringの検証アノテーション
@ValidatedはSpringが提供する検証用アノテーションです。代表的な使い道は、グループバリデーションです。
public interface CreateGroup {}
public interface UpdateGroup {}
public class UserForm {
@Null(groups = CreateGroup.class)
@NotNull(groups = UpdateGroup.class)
private Long id;
@NotBlank
private String name;
}
登録時はID不要、更新時はID必須、というように同じFormでも処理ごとにチェックを変えたい場合に使われます。
@PostMapping("/users")
public String create(@Validated(CreateGroup.class) UserForm form,
BindingResult bindingResult) {
// 登録用のチェック
return "users/new";
}
@PostMapping("/users/{id}")
public String update(@Validated(UpdateGroup.class) UserForm form,
BindingResult bindingResult) {
// 更新用のチェック
return "users/edit";
}
初学者はまず@Validで考える
新人のうちは、いきなり@Validatedやグループバリデーションを使いこなそうとしなくて大丈夫です。普通の入力チェックなら@Validで始める方が読みやすいです。
迷ったら、まず@Valid。登録と更新でチェックを分けたい、メソッド引数を検証したいなど、理由が出てきたら@Validatedを検討します。
importの違いにも注意する
Spring Boot 3系では、@Validはjakarta.validation.Validを使います。古い記事や古いプロジェクトではjavax.validation.Validが出てくることもあります。
import jakarta.validation.Valid; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import org.springframework.validation.annotation.Validated;
プロジェクトのSpring Bootバージョンによってimportが違うため、サンプルをコピペして赤くなったときは、まずimportを確認しましょう。
現場での使い分け
- 単純な画面入力:
@Valid - JSON APIのRequest DTO:
@Valid - 登録と更新でチェックを切り替える:
@Validatedを検討 - Serviceメソッドの引数検証: プロジェクト方針を確認して
@Validatedを検討
使い分けで大事なのは、難しい方を使うことではありません。チームのコードを読んだ人が、なぜそのアノテーションなのか理解できることです。
レビュー前のセルフチェック
確認リスト
- 普通の入力チェックなのに、理由なく
@Validatedを使っていないか - 登録と更新でチェックを分ける必要が本当にあるか
- importがプロジェクトのSpring Bootバージョンに合っているか
- 既存コードの入力チェック方針から外れていないか
この記事とあわせて読みたい
- BindingResultの使い方と注意点|@Validの直後に置く理由
- Spring Bootの入力チェックはどこでやる?ControllerとServiceの役割
- Spring BootのFormクラスとDTOの違いは?混ぜると困る理由を解説
まとめ
@Validと@Validatedは、どちらも入力チェックに関係します。初学者は、まず@Validを標準的な入口として理解しましょう。
@Validatedは、グループバリデーションなど明確な理由があるときに使うと考えると、現場コードでも迷いにくくなります。
