앞선 2020/08/19 - [개발] - JAVA Spring Validation에 사용된 User Class에 있는 annotation을 포스팅하려고 해요
대략적인 User class입니다.
@EqualFields(baseField = "loginPwd", matchField = "loginPwdRe", message = "비밀번호랑 비밀번호확인이 일치하지 않습니다.")
public class User {
private String rprsntYn;
private Integer id;
private Integer userType;
private String name;
@IdCheck(message = "아이디 체크버튼을 눌러주세요.")
@NotBlank(message = "아이디를 입력하세요.")
private String loginId;
}
@NotBlank,@EqualFields는 기본적으로 제공되는 annotation입니다.
@NotBlank 사용하기에 앞서 비슷한 2가지 annotation이 있습니다.
@NotBlank | @NotNull | @NotEmpty |
null 체크 and "" 빈값허용불가 | null 만체크 | "" 빈값만 체크 |
상황에 맞게 사용하시면 돼요.
EqualFields annotation는 필드에 선언이 아니고 Class상단에 선언이 되어야 작동을 해요.
이제 @IdCheck custom annoation을 JAVA Spring Validation에 사용된 User Class에 있는 annotation을 포스팅하려고 해요
@Target({ElementType.METHOD, ElementType.FIELD}) //사용할 타켓은 메소드랑 필드를 지정했어요
@Retention(RetentionPolicy.RUNTIME) // 컴파일 이후에도 JVM에 의해서 참조가 가능합니다.
//@Retention(RetentionPolicy.CLASS) // 컴파일러가 클래스를 참조할 때까지 유효합니다.
//@Retention(RetentionPolicy.SOURCE) // 어노테이션 정보는 컴파일 이후 없어집니다.
@Constraint(validatedBy = {IdValidator.class})
public @interface IdCheck {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
----------------------------------------------------
//아이디가 이메일방식 또는 일반문자로 받고있어서 검증을 다르게하였습니다.
public class IdValidator implements ConstraintValidator<IdCheck, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (!StringUtils.isEmpty(value)) {
Pattern p = null;
if (value.contains("@")) {
p = Pattern.compile("^[_a-z0-9-]+(.[_a-z0-9-]+)*@(?:\\w+\\.)+\\w+$");
//새로운 메세지추가
context.buildConstraintViolationWithTemplate("message.validation.join.loginId.verification2").addConstraintViolation();
//기존메세지 비활성
context.disableDefaultConstraintViolation();
} else {
p = Pattern.compile("^[a-zA-Z]{1}[a-zA-Z0-9_]{5,19}$");
}
Matcher m = p.matcher(value);
return m.matches();
} else {
return true;
}
}
@Override
public void initialize(IdCheck constraintAnnotation) {
// TODO Auto-generated method stub
}
}
return값이 true, false에 따라서 loginId필드 검증 데이터가 BindingResult에 담겨서 Controller에 전달을 하고있습니다.
이제 기본 annoation에서 제공이 안 되는 부분은 직접 구현을 하여 적용을 할 수가 있습니다.
'개발 > Java' 카테고리의 다른 글
egov 3.9버전 mybatis association 사용시 에러(org.apache.ibatis.javassist.util.proxy.SecurityActions.setAccessible) (0) | 2020.11.19 |
---|---|
Java Jpa Specifications사용하기 (0) | 2020.09.23 |
ksoap2이용하여 SOAP API가져오기 (0) | 2020.09.14 |
JAVA Spring Validation (0) | 2020.08.19 |
자바 카카오 로그인(OPEN ID) (2) | 2020.08.12 |