스프링에서 파라미터 유효성 검사를 위한 커스터 마이징
날짜형식의 String을 유효성 체크 하기 위한 커스터 마이징
날짜형식 : 2021-09-10
1. 의존성 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2. 사용자 정의 어노테이션을 위한 인터페이스 생성
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
@Documented
@Constraint(validatedBy = DateValidator.class)
@Target( {ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DateValid {
String message() default "날짜형식이 옳바르지 않습니다.";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
3. 유효성 검사를 실행할 클래스 생성
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class DateValidator implements ConstraintValidator<DateValid, String>{
@Override
public void initialize(DateValid constraintAnnotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null || value.length() == 0) return true;
try {
LocalDate.from(LocalDate.parse(value, DateTimeFormatter.ofPattern("yyyy-MM-dd")));
} catch (DateTimeParseException e) {
e.printStackTrace();
return false;
}
return true;
}
}
4. DTO에 사용자 정의 유효성 검사 어노테이션 추가
@DateValid(message = "날짜형식이 옳바르지 않습니다.")
private String date;