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で数値のみかどうかをバリデーションすることができます。
選択する方法は、具体的な要件やプロジェクトのスタイルに依存します。