SpringBootで数値のみかバリデーションチェック

SpringBootで数値のみかバリデーションチェック

SpringBootで数値のみかどうかをバリデーションするには、@Patternアノテーションや@Digitsアノテーションを使う方法があります。
また、独自のバリデータを作成することもできます。
以下にそれぞれの方法を詳しく説明します。

1. @Patternアノテーションを使う

@Patternアノテーションを使って、正規表現で数値のみのバリデーションを行います。
この方法は、入力が数字であることを確認するために正規表現を用います。

コード例

import javax.validation.constraints.Pattern;

public class ExampleRequest {

  @Pattern(regexp = "^\\d+$", message = "入力値は数字のみでなければなりません")
  private String number;

  // ゲッターとセッター
}

この例では、^\\d+$ という正規表現を使用して、入力が1つ以上の数字であることを確認しています。
message属性にはエラーメッセージを指定できます。

2. @Digitsアノテーションを使う

@Digitsアノテーションは、数字の桁数を制限する場合に便利です。
整数部と小数部の桁数を指定できます。

コード例

import javax.validation.constraints.Digits;

public class ExampleRequest {

  @Digits(integer = 10, fraction = 0, message = "入力値は整数で、最大10桁までです")
  private String number;

  // ゲッターとセッター
}

ここでは、integer属性で整数部の桁数を指定し、fraction属性で小数部の桁数を指定しています。
小数部を0にすることで、整数値のみを受け入れることができます。

3. 独自のバリデーションアノテーションを作成する

SpringBootでは、カスタムバリデータを作成することも可能です。
これにより、特定の要件に応じたバリデーションロジックを実装できます。

コード例

1. カスタムアノテーションを作成する

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 = NumericValidator.class)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface Numeric {
  String message() default "入力値は数字のみでなければなりません";
  Class<?>[] groups() default {};
  Class<? extends Payload>[] payload() default {};
}

2. バリデータクラスを作成する

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

public class NumericValidator implements ConstraintValidator<Numeric, String> {

  @Override
  public void initialize(Numeric numeric) {
  }

  @Override
  public boolean isValid(String value, ConstraintValidatorContext context) {
    if (value == null) {
      return true; // Nullは他のバリデーションでチェックされるべき
    }
    return value.matches("\\d+");
  }
}

3. アノテーションを使用する

public class ExampleRequest {

  @Numeric
  private String number;

  // ゲッターとセッター
}

この方法では、@Numericアノテーションを作成し、そのアノテーションをNumericValidatorクラスで実装しています。
isValidメソッド内で、入力が数字のみであるかどうかを確認しています。

以上の方法を使って、SpringBootで数値のみかどうかをバリデーションすることができます。
選択する方法は、具体的な要件やプロジェクトのスタイルに依存します。