SpringBootで半角数字バリデーション
SpringBootで半角数字のバリデーションを実装する方法について説明します。
以下の手順で、入力された値が半角数字であるかどうかを検証するバリデーションを設定することができます。
1. バリデーションの依存関係を追加
まず、pom.xml(Mavenを使用している場合)にバリデーションの依存関係を追加します。
spring-boot-starter-validationは、Bean Validationをサポートするライブラリです。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
2. バリデーションアノテーションの作成
次に、半角数字のバリデーションを行うカスタムアノテーションを作成します。
以下は、@HalfWidthNumberというアノテーションを定義する例です。
HalfWidthNumber.java(アノテーション)
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 = HalfWidthNumberValidator.class) @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER }) @Retention(RetentionPolicy.RUNTIME) public @interface HalfWidthNumber { String message() default "Input must be half-width numbers"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
HalfWidthNumberValidator.java(バリデータ)
次に、アノテーションに対応するバリデータクラスを作成します。
ここで、入力値が半角数字であるかどうかをチェックします。
package com.example.validation; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; public class HalfWidthNumberValidator implements ConstraintValidator<HalfWidthNumber, String> { @Override public void initialize(HalfWidthNumber constraintAnnotation) { } @Override public boolean isValid(String value, ConstraintValidatorContext context) { if (value == null) { return true; // or false based on your requirement } return value.matches("^[0-9]+$"); // 正規表現で半角数字をチェック } }
3. バリデーションを適用する
次に、モデルクラスやDTOに対して、カスタムバリデーションアノテーションを適用します。
UserDto.java(DTO)
package com.example.dto; import com.example.validation.HalfWidthNumber; public class UserDto { @HalfWidthNumber private String numericField; // getters and setters }
4. バリデーションエラーの処理
バリデーションエラーが発生した場合の処理は、通常、@RestControllerAdviceを使用して行います。
これにより、エラーメッセージをクライアントに返すことができます。
GlobalExceptionHandler.java
package com.example.exception; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.validation.FieldError; @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity<?> handleValidationExceptions(MethodArgumentNotValidException ex) { var errors = ex.getBindingResult().getAllErrors(); var errorMessages = errors.stream() .map(error -> ((FieldError) error).getField() + ": " + error.getDefaultMessage()) .toArray(String[]::new); return new ResponseEntity<>(errorMessages, HttpStatus.BAD_REQUEST); } }
まとめ
以上で、SpringBootを使用して半角数字のバリデーションを実装する方法を説明しました。
カスタムアノテーションとバリデータを作成し、DTOやモデルに適用することで、ユーザーの入力を正しく検証できます。
バリデーションエラーが発生した場合には、適切にエラーメッセージを処理してクライアントに返すようにします。