🌟

Re:ゼロから始めるSpring Boot実践#1 WebBlog開発#2 Spring Validation

に公開

Spring Validationとは

Spring Validation(スプリングバリデーション)とは、
Spring Framework、特にSpring MVCやSpring Bootで、
**入力値チェック(バリデーション)**を簡単に行うための仕組みです。

ざっくりまとめると、

項目 説明
目的 フォーム入力やAPIリクエストのデータが正しいか検証するため
主なやり方 アノテーション(@NotNull, @Size, @Emailなど)を使う
使う技術 javax.validation (Jakarta Bean Validation) と Hibernate Validator
コントローラー側で使うもの @Valid または @Validated アノテーション

Spring Validationの使い方

1. 依存パッケージ注入

pom.xmlに追加してMavenプロジェクトを再読み込みする。

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>

2. パラメータ前に@Patternを付ける

正規表現でコンディションを設定すること。
実装例

    public Result register(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$") String password) {

3. Controllerクラスに@Validatedを付ける

実装例

@Validated //←これ
public class UserController {

4. 実行結果確認

Postmanのレスポンス:
ステータスコードが500になるんだね。

{
    "timestamp": "2025-04-28T07:40:47.945+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "path": "/user/register"
}

ログも確認しておこう:

ValidationのExceptionHandler

Validationチェック失敗したら、ブラウザーに500が返されるのが不適切であり、エラーメッセージのフォーマットもデフォルトのままでわかりづらいため、Validationチェックのエラーハンドリングを行う必要がある。また、他でも利用できるように、共通のExceptionHandlerとして作成する。

GlobalExceptionHandlerクラスを作成

@RestControllerAdvice //← RESTコントローラー専用の例外処理を行うためのアノテーション
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public Result handleException(Exception e){ //Result以前作成したResultクラスを流用
        e.printStackTrace(); //スタックトレースを出力する
        return Result.error(StringUtils.hasLength(e.getMessage()) ? e.getMessage() : "処理失敗"); //eのメッセージがnullであれば、"処理失敗"を返す
    }
}

GlobalExceptionHandler実行結果を確認

Postman:

トレースログ:

Discussion