SpringBootで日付形式のバリデーション処理
SpringBootで日付形式のバリデーション処理を行うには、javax.validationパッケージを使用するのが一般的です。
javax.validationは、Bean Validation APIの標準仕様であり、日付形式のバリデーションには@Patternアノテーションやカスタムバリデーターを使用する方法があります。
基本的なバリデーション処理
@Patternアノテーションを使用する方法
@Patternアノテーションを使用して、文字列が特定の正規表現パターンに一致するかどうかを検証できます。
日付形式のバリデーションには、正規表現を使って日付形式を指定します。
import javax.validation.constraints.Pattern; public class DateForm { // フォーマットに合わない場合、messageのエラーメッセージが取得される @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$", message = "日付のフォーマットが正しくありません。") private String date; // getters and setters }
上記の例では、yyyy-MM-dd形式の日付を検証しています。
カスタムバリデーターを使用する方法
複雑なバリデーションロジックが必要な場合、カスタムバリデーターを作成するのが適しています。
カスタムアノテーションの作成
アノテーション名がValidDateになる。
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; @Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE, ElementType.LOCAL_VARIABLE }) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = DateValidator.class) public @interface ValidDate { String message() default "Invalid date format"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
カスタムバリデーターの実装
ConstraintValidatorインターフェースのメソッドを実装
import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.text.ParseException; import java.text.SimpleDateFormat; public class DateValidator implements ConstraintValidator<ValidDate, String> { private static final String DATE_FORMAT = "yyyy-MM-dd"; @Override public void initialize(ValidDate constraintAnnotation) { } @Override public boolean isValid(String date, ConstraintValidatorContext context) { if (date == null || date.isEmpty()) { return true; // Assuming null or empty values are valid } SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); sdf.setLenient(false); try { sdf.parse(date); return true; } catch (ParseException e) { return false; } } }
フォームクラスでカスタムアノテーションを使用
public class DateForm { @ValidDate private String date; // getters and setters }
カスタムバリデーションについては、以下でも詳しく記載しています。
ti-tomo-knowledge.hatenablog.com
コントローラーでのバリデーション処理
バリデーションを適用するには、コントローラーで@Validアノテーションを使用します。
import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import javax.validation.Valid; @Controller @RequestMapping("/date") public class DateController { @PostMapping("/validate") public String validateDate(@Valid @RequestBody DateForm dateForm, BindingResult result) { if (result.hasErrors()) { return "error"; } return "success"; } }
まとめ
SpringBootで日付形式のバリデーションを実装するには、@Patternアノテーションを使った簡単な方法と、カスタムバリデーターを用いた詳細なバリデーションの2つの方法があります。
@Patternは簡単なケースに適しており、カスタムバリデーターはより複雑な検証が必要な場合に有効です。