유저레포에서 이메일로 찾아 중복확인만 하면 될 줄 알았는데 프레디의 pr을 보고 생각도 못했던 예외처리..를 시작했다. 이메일이 리퀘스트 파람으로 들어오니까 이메일이 이메일 형식인지, 쿼리파람에 이상하게 들어오는지를 체크하고싶었다.
regex로 하면 되겠지만 난 잘 모르니까.. 우선 Email validate하는 방법이 따로 있나 싶어 구글링해봤더니 regex를 사용하는 방법, Apache Commons validator를 사용하는 방법이 있다고 했다. 후자는 따로 디펜던시를 추가해줘야하니 (내 판단으로) regex로 validate해주는 클래스를 하나 추가하고 서비스 로직에 넣었다.
public class EmailValidatorStrict {
private static final String EMAIL_PATTERN =
"^(?=.{1,64}@)[A-Za-z0-9_-]+(\\\\.[A-Za-z0-9_-]+)*@"
+ "[^-][A-Za-z0-9-]+(\\\\.[A-Za-z0-9-]+)*(\\\\.[A-Za-z]{2,})$";
private static final Pattern pattern = Pattern.compile(EMAIL_PATTERN);
public static boolean isValid(final String email) {
Matcher matcher = pattern.matcher(email);
return matcher.matches();
}
}
근데 오늘 백엔드끼리 잠깐 회의하는데 프레디가 @Email
, @Valid
어노테이션으로 유효성검사를 해주는 걸 보고 그렇게 바꾸려고 알아봤는데 나는 리퀘스트파람을 검사해야해서 @Validate
어노테이션을 컨트롤러에 붙였으나 프레디가 처리한 예외와 다른 예외가 나와서 그것도 핸들링해줬지만 이메일 어노테이션에 null 값이 허용되어서 널이나 빈문자열 처리는 @NotEmpty
로 따로 해주었다.