---
title: SpringBootバリデーション実践入門
tags:  #java #jjug ccc #spring boot  
author: [mikoto2000](https://www.docswell.com/user/mikoto2000)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/4EQV4NXYJP.jpg?width=480
description: JJUG CCC 2025 Fall(https://jjug.doorkeeper.jp/events/190868)  Spring Boot で業務アプリを開発する際に欠かせないのが入力値のバリデーションです。 本セッションでは、 Spring Boot のバリデーション機能の基本的な使い方から、カスタムバリデーション、例外処理、エラーメッセージの取り扱いまで、サンプルコードを交えながら解説します。 これから Spring Boot を使い始める方、あるいは「バリデーション定義はしたことあるけど、エラーハンドリングの仕組みは有識者に任せていた」という状態から一歩先に進みたい方に役立つ内容をお届けします。
published: November 16, 25
canonical: https://www.docswell.com/s/mikoto2000/59MQPP-2025-11-16-031358
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/4EQV4NXYJP.jpg)

Spring Boot
バリデーション実践入門
例外処理からエラーメッセージまで


# Page. 2

![Page Image](https://bcdn.docswell.com/page/KJ4MQG6ZE1.jpg)

このスライドについて
• 対象者
• 基本的な Spring Boot アプリを作ったことはあるが、バリデーション
を体系的に学んでいない人
• Spring Boot プロジェクトの基礎設計をする人
• 目標
• Spring Boot のバリデーションで、「こんなことができるんだ」とい
う事を知る


# Page. 3

![Page Image](https://bcdn.docswell.com/page/LE18PDVD7G.jpg)

目次
• 基本のバリデーション
• カスタムバリデーション
• エラーメッセージ定義とi18n
• バリデーションエラーの返却


# Page. 4

![Page Image](https://bcdn.docswell.com/page/GEWZ2YL8E2.jpg)

基本のバリデーション
基本は単項目チェック。
アノテーションをつけることにより、どんなバリデーションを行
うか定義する。
• @RequestParam に直接定義
• @RequestBody のバリデーション定義
(Bean のフィールドにバリデーション定義)
• デフォルトアノテーションの一例


# Page. 5

![Page Image](https://bcdn.docswell.com/page/47Z1DXM9J3.jpg)

@RequestParam に直接定義
引数にアノテーションをつける
ことでバリデーションを定義
文字数は、 1 から 10 とする
文字、正規表現 “[0-9]*” にマッチする


# Page. 6

![Page Image](https://bcdn.docswell.com/page/YJ6L14NDEV.jpg)

動作確認(バリデーション成功)
正規表現”[0-9]*”に適合


# Page. 7

![Page Image](https://bcdn.docswell.com/page/GJ514Q5874.jpg)

動作確認(バリデーション失敗)
正規表現”[0-9]*”に不適合
エラーの情報がずらずらと返却される


# Page. 8

![Page Image](https://bcdn.docswell.com/page/LE31GVNG75.jpg)

@RequestBody のバリデーション定義
(Bean のフィールドにバリデーション定義)
@RequestBody に @Valid を付与
Bean の各フィールドにバリデーション用
のアノテーションを付与


# Page. 9

![Page Image](https://bcdn.docswell.com/page/8EDX18WNJG.jpg)

デフォルトアノテーション
jakarta.validation.constraints.AssertFalse
jakarta.validation.constraints.AssertTrue
jakarta.validation.constraints.DecimalMax
jakarta.validation.constraints.DecimalMin
jakarta.validation.constraints.Digits
jakarta.validation.constraints.Future
jakarta.validation.constraints.Max
jakarta.validation.constraints.Min
jakarta.validation.constraints.NotNull
jakarta.validation.constraints.Null
jakarta.validation.constraints.Past
jakarta.validation.constraints.Pattern
jakarta.validation.constraints.Size
org.hibernate.validator.constraints.Email
org.hibernate.validator.constraints.Length
org.hibernate.validator.constraints.NotEmpty
org.hibernate.validator.constraints.Range
org.hibernate.validator.constraints.URL
何となく名前覚えておけば
大体できることがわかる
使うときに都度都度調べるので
あまり覚えなくてよいかも


# Page. 10

![Page Image](https://bcdn.docswell.com/page/V7PPQ89N78.jpg)

カスタムバリデーション
基本のバリデーションで足りない場合、ロジックを自分で書くこ
とになる。
相関チェックや、単項目チェックでもデフォルトで足りないもの
など。
• 相関チェック(クラスレベル制約)
• カスタムバリデーターの作成


# Page. 11

![Page Image](https://bcdn.docswell.com/page/2JV25NMYJQ.jpg)

相関チェック(クラスレベル制約)
• AssertTrue アノテーションを使用
することで、相関チェックも可能
isXxx メソッドに `@AssertTrue` を付与し、
バリデーション結果を true/false で返却する


# Page. 12

![Page Image](https://bcdn.docswell.com/page/5EGR6KGWJL.jpg)

カスタムバリデーターの作成(1/2)
• デフォルトで提供されて
いるアノテーションでは
不十分な場合、自分でア
ノテーションを作ること
もできる
0から100までと、255 のみバリデーションOK
• 左の例では Range を拡
張し、範囲プラスαの数
値を Valid とするアノ
テーションを使っている


# Page. 13

![Page Image](https://bcdn.docswell.com/page/4JQV4NXQ7P.jpg)

カスタムバリデーターの作成(2/2)


# Page. 14

![Page Image](https://bcdn.docswell.com/page/K74MQG6YJ1.jpg)

カスタムバリデーターの作成(2/2)
アノテーションなど、
基本的な構造は Range からコピー
最大値・最小値は Min, Max からオーバーライド
拡張した項目を追加


# Page. 15

![Page Image](https://bcdn.docswell.com/page/LJ18PDVNEG.jpg)

カスタムバリデーターの作成(2/2)
定義したパラメーターを private フィールドとして保存する


# Page. 16

![Page Image](https://bcdn.docswell.com/page/GJWZ2Y3MJ2.jpg)

カスタムバリデーターの作成(2/2)
定義したパラメーターと受け取った値を比較し、
バリデーションの結果を返却する


# Page. 17

![Page Image](https://bcdn.docswell.com/page/4EZ1DXVM73.jpg)

エラーメッセージ定義とi18n
エラーメッセージの設定方法は、大きく分けて以下 2 つ。
• 個別指定(アノテーションで指定)
• 言語別デフォルト指定


# Page. 18

![Page Image](https://bcdn.docswell.com/page/Y76L1455JV.jpg)

個別指定(アノテーションで指定)
`massage` で指定した文字列が、エラーメッセージになる


# Page. 19

![Page Image](https://bcdn.docswell.com/page/G7514QYGE4.jpg)

デフォルト指定
`src/main/resources/ValidationMessages.properties` にデフォルトメッセージ定義を記
述できる。


# Page. 20

![Page Image](https://bcdn.docswell.com/page/9J21VPGD7R.jpg)

言語別デフォルト指定
`src/main/resources/ValidationMessages_en.properties` や
`src/main/resources/ValidationMessages_ja.properties` 等を
作成することで、言語別のデフォルトメッセージ定義が可能。
出力するメッセージは、リクエストヘッダーの `Locale` ヘッ
ダーを見て判断される。


# Page. 21

![Page Image](https://bcdn.docswell.com/page/DEYZ35VM7M.jpg)

バリデーションエラーの返却
バリデーションエラーは、一元管理するのが楽なので、その方法
を紹介する。
• advice によるバリデーションエラー返却の一元化


# Page. 22

![Page Image](https://bcdn.docswell.com/page/VJN3VNM3J8.jpg)

advice による
バリデーションエラー返却の一元化
• デフォルトではスタックトレースが含まれており、これをよし
としない場合が多い
• また、バリデーションエラーの構造は全エンドポイントで統一
されていることがほとんど
• ⇒ `@RestControllerAdvice` を用いてバリデーションエラー返
却の一元化が可能


# Page. 23

![Page Image](https://bcdn.docswell.com/page/YE996RNPE3.jpg)

全体像
`@RestControllerAdvice` 内に以下の 3 種類のメソッドを追加す
ることで、バリデーション関連エラーの一元化が可能


# Page. 24

![Page Image](https://bcdn.docswell.com/page/GE89ZWKX7D.jpg)

メソッド引数の単純値の
バリデーションエラーを処理するハンドラ
引数に直接バリデーション定義をつけたもののバリデーションエ
ラー時にここに来る


# Page. 25

![Page Image](https://bcdn.docswell.com/page/LELWDNZNJR.jpg)

メソッド引数の bean の
バリデーションエラーを処理するハンドラ
`@Valid`をつけたもののバリデーションエラー時にここに来る


# Page. 26

![Page Image](https://bcdn.docswell.com/page/4JM9PXVQEW.jpg)

シンタックスエラーなど、そもそも正しくな
いリクエストだった場合に処理するハンドラ


# Page. 27

![Page Image](https://bcdn.docswell.com/page/PJRG1N2KE9.jpg)

まとめ
今回は、以下の項目が行えることを説明してきました。
• 単項目バリデーション
• 相関チェックのバリデーション
• デフォルトメッセージの設定方法
• 言語別のデフォルトメッセージの設定方法
• バリデーションエラーの効率の良いハンドリング方法
Spring Boot は、効率よく望んだとおりのバリデーションを行うため
の仕組みを用意してくれています。
これら機能を活用してどんどん楽をしていきましょう。


