반응형
생년월일을 yyyyMM 6자로 입력받는 annotation 생성하기
User.java
package com.example.practice2.validation.model.dto;
// 2.0 validation
import com.example.practice2.validation.annotation.YearMonth;
import javax.validation.constraints.*;
public class User {
// 생년월일
// default 형식이 'YYYYMM' -> 199912
// @Size(min=8, max=8)
@YearMonth
private String birth;
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
}
YearMonthValidator
package com.example.practice2.validation.validator;
import com.example.practice2.validation.annotation.YearMonth;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class YearMonthValidator implements ConstraintValidator<YearMonth, String> {
private String pattern;
@Override
public void initialize(YearMonth constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
// YearMonth 어노테이션에 있는 pattern메소드 값으로 세팅하여 사용
this.pattern = constraintAnnotation.pattern();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// pattern디폴트 값은 'YYYYMM'
try {
LocalDate.parse(value + "01", DateTimeFormatter.ofPattern(this.pattern));
} catch (Exception e) {
return false;
}
return true;
}
}
interface Yearmonth
package com.example.practice2.validation.annotation;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Constraint(validatedBy = { })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
public @interface YearMonth {
String message() default "{year month 형식에 맞지 않음 (예) 199012}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
String pattern() default "yyyyMMdd";
}
형식에 맞게 보냈을 때
birth : 199405
형식에 맞지 않게 보냈을 때
birth : 19940507
반응형
'Spring' 카테고리의 다른 글
[스프링] 예외처리 @ExceptionHandler (0) | 2023.07.05 |
---|---|
[스프링] Exception 처리하는 방법 (0) | 2023.07.05 |
[스프링] 검증 : @validated @RequestParam (0) | 2023.07.05 |
[스프링] 검증 : bindingResult (0) | 2023.07.05 |
[스프링] Validation 정리 (0) | 2023.07.05 |