SpringBootで配列のバリデーション

SpringBootで配列のバリデーション

SpringBootで配列のバリデーションを行う方法について説明します。
ここでは、SpringBootとSpring Validationを使用して、配列やリストのバリデーションを実施する方法について説明します。

1. 依存関係の追加

まず、pom.xmlファイルにSpringBootとバリデーションの依存関係を追加します。

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

2. バリデーション用のカスタムアノテーションの作成

配列のバリデーションにカスタムアノテーションを作成することができます。
以下のコードでは、配列の要素が特定の条件を満たしているかどうかを確認するアノテーションを作成しています。

package com.example.validation;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Constraint(validatedBy = ArrayValidator.class)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidArray {
  String message() default "Invalid array elements";
  Class<?>[] groups() default {};
  Class<? extends Payload>[] payload() default {};
}

3. バリデーションロジックの実装

次に、バリデーションロジックを実装するArrayValidatorクラスを作成します。

package com.example.validation;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class ArrayValidator implements ConstraintValidator<ValidArray, int[]> {

  @Override
  public void initialize(ValidArray constraintAnnotation) {
  }

  @Override
  public boolean isValid(int[] values, ConstraintValidatorContext context) {
    if (values == null) {
      return true; // Nulls are considered valid, you can handle this as needed
    }

    for (int value : values) {
      if (value < 0) {
        return false; // Invalid if any element is negative
      }
    }
    return true;
  }
}

この例では、配列内のすべての整数が0以上であることを確認しています。

4. バリデーションの適用

カスタムアノテーションを適用したいフィールドに、作成したアノテーションを付けます。
例えば、次のようにクラス内で使用できます。

package com.example.demo;

import com.example.validation.ValidArray;
import javax.validation.constraints.NotNull;

public class ExampleRequest {

  @NotNull
  @ValidArray
  private int[] numbers;

  // getters and setters
}

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

SpringBootのコントローラー内で、リクエストパラメータとして渡された配列がバリデーションされるようにします。
例えば、次のようにします。

package com.example.demo;

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;

@RestController
public class ExampleController {

  @PostMapping("/validate")
  public String validateArray(@Valid @RequestBody ExampleRequest request) {
    return "Array is valid";
  }
}

まとめ

この方法で、SpringBootを使って配列のバリデーションを行うことができます。
カスタムアノテーションを作成し、バリデーションロジックを実装することで、配列やリストのバリデーションを柔軟に処理できます。
バリデーションのロジックはビジネス要件に応じて調整できます。