@EntityListeners(AuditingEntityListener.class): JPA Auditing 기능을 사용하기 위한 어노테이션 - 해당 어노테이션을 사용하면, 엔티티 객체가 생성/변경될 때 시간을 자동으로 넣어준다.
@Column(updatable = false): 해당 컬럼을 SQL UPDATE 문에서 제외한다. 즉, 한번 설정된 'createdAt' 값은 변경되지 않는다.
public interface ErrorCode {
String name();
HttpStatus getHttpStatus();
String getMessage();
}
@Getter
@RequiredArgsConstructor
public enum UserErrorCode implements ErrorCode {
REJECTED_USER_EXECUTION(HttpStatus.FORBIDDEN, "수정 권한이 없어요!"),
NON_USER_EXSIST(HttpStatus.NOT_FOUND, "해당 사용자가 존재하지 않아요!"),
ALREADY_EXSIST_USER(HttpStatus.FORBIDDEN, "이미 존재하는 사용자에요!"),
PASSWORD_IS_NOT_MATCH(HttpStatus.FORBIDDEN, "비밀번호가 일치하지 않아요!"),
RECNTLY_SET_PASSWORD(HttpStatus.FORBIDDEN,"최근 3번안에 사용한 비밀번호는 사용할 수 없어요!"),
NON_LOGIN_USER(HttpStatus.NOT_FOUND,"로그인 된 유저가 아니에요!"),
NON_USER(HttpStatus.NOT_FOUND, "존재하지 않는 유저 입니다.");
private final HttpStatus httpStatus;
private final String message;
}
💻 사용 예시
UserErrorCode errorCode = UserErrorCode.REJECTED_USER_EXECUTION;
System.out.println(errorCode.name());
-각각의 enum 값 (REJECTED_USER_EXECUTION, NON_USER_EXSIST 등)은 특정 HTTP 상태 코드와 메시지를 가지고 있다
public class NonUserExsistException extends RestApiException {
public NonUserExsistException(ErrorCode errorCode) {
super(errorCode);
}
}
-RestApiException 클래스는 RuntimeException을 상속받는다.
-사용자 정의 런타임 예외 클래스를 작성할 수 있다.
user = userRepository.findByUsername(username)
.orElseThrow(() -> new NonUserExsistException(NON_USER_EXSIST));
if (!passwordEncoder.matches(password, user.getPassword())) {
throw new PasswordIsNotMatchException(PASSWORD_IS_NOT_MATCH);
}
-이 코드에서와 같이 사용자 정의 런타임 exception을 날릴 수 있는 특징이 있고 Errorcode 부분에 enum요소를 넣음으로서 UserErrorCode를 출력시킨다.
-이 코드에서는 HttpStatus.NOT_FOUND 상태 코드와 "해당 사용자가 존재하지 않아요!"가 출력되거나 HttpStatus.FORBIDDEN 상태 코드와 "비밀번호가 일치하지 않아요!"가 출력될 것이다.