SpringBootで文字数のバリデーション

SpringBootで文字数のバリデーション

SpringBoot で文字数のバリデーションを行うには、主に javax.validation パッケージのアノテーションを使用します。
これにより、入力フィールドの文字数を簡単に制限できます。
以下では、SpringBoot アプリケーションで文字数のバリデーションを設定する方法を説明します。

1. プロジェクトの設定

まず、SpringBoot プロジェクトにバリデーションの依存関係を追加します。
build.gradle または pom.xml ファイルに以下の依存関係を追加します。

Gradleの場合
dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-web'
  implementation 'org.springframework.boot:spring-boot-starter-validation'
}
Mavenの場合
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
  </dependency>
</dependencies>

2. エンティティクラスの作成

次に、バリデーションを適用するエンティティクラスを作成します。
例えば、ユーザーの名前に対して文字数制限を設ける場合、以下のように @Size アノテーションを使います。

import javax.validation.constraints.Size;

public class User {

  @Size(min = 2, max = 30, message = "名前は2文字以上30文字以下でなければなりません")
  private String name;

  // その他のフィールド、ゲッター、セッター
}

ここで、@Size アノテーションは min と max 属性を使って、文字列の最小文字数と最大文字数を指定します。
message 属性はバリデーションエラーメッセージを指定します。

3. コントローラーでのバリデーション

エンティティクラスにバリデーションを設定したら、コントローラーでそのバリデーションを使用します。
コントローラーのメソッドに @Valid アノテーションを追加することで、バリデーションを適用します。

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;

@RestController
@Validated
public class UserController {

  @PostMapping("/users")
  public String createUser(@Valid @RequestBody User user) {
    // ユーザー作成処理
    return "ユーザーが作成されました";
  }
}

4. エラーハンドリング

バリデーションエラーが発生した場合、SpringBoot は自動的に400 Bad Requestレスポンスを返します。
カスタムエラーレスポンスを作成したい場合は、以下のように @ControllerAdvice を使用してエラーハンドラーを作成できます。

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

import java.util.HashMap;
import java.util.Map;

@ControllerAdvice
public class CustomExceptionHandler {

  @ExceptionHandler(MethodArgumentNotValidException.class)
  public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
    Map<String, String> errors = new HashMap<>();
    ex.getBindingResult().getAllErrors().forEach((error) -> {
      String fieldName = ((FieldError) error).getField();
      String errorMessage = error.getDefaultMessage();
      errors.put(fieldName, errorMessage);
    });
    return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
  }
}

このコードは、バリデーションエラーが発生した際に、エラーの詳細を含むカスタムレスポンスを返します。

以上の手順で、SpringBoot アプリケーションで文字数のバリデーションを適用し、エラーハンドリングを行うことができます。