coco 프로젝트를 하던 중에, 예외 처리를 잘 해보라는 튜터님의 피드백이 있었다.
기존에 우리 팀은 특별한 예외처리를 해주지 않았었고, 에러가 발생하면 무조건 500 에러로 처리되고 있었다.
어떻게 예외 처리를 해주어야 할 지 이리 저리 찾아보다가 ResponseEntity라는 것을 보게 되었고 적용해보기로 했다!
| MemberService.java
// 로그인
public LoginResponseDto login(LoginRequestDto requestDto) {
// requestDto에 담긴 로그인 정보들이 DB에 있는지 확인
Member findMember = memberRepository.findByEmail(requestDto.getEmail()).orElseThrow(
() -> new IllegalArgumentException("일치하는 사용자가 없습니다.")
);
...
}
Optional<Member>
이기 때문에 orElseThrow로 예외를 처리해주었었다.| MemberService.java
// 로그인
public ResponseEntity<LoginResponseDto> login(LoginRequestDto requestDto) {
// requestDto에 담긴 로그인 정보들이 DB에 있는지 확인
Optional<Member> memberOptional = memberRepository.findByEmail(requestDto.getEmail());
if (memberOptional.isEmpty()) {
return new ResponseEntity<>(
LoginResponseDto.builder().status(StatusMessage.BAD_REQUEST).build(),
HttpStatus.valueOf(StatusCode.BAD_REQUEST)
);
}
Member findMember = memberOptional.get();
...
}
이렇게 예외를 처리해주기 위해 상태코드 / 상태메세지를 담은 클래스를 만들었다.
| StatusCode.java
public class StatusCode {
public static final int SUCCESS = 200;
public static final int BAD_REQUEST = 400;
public static final int INVALID_TOKEN = 400;
public static final int INVALID_PARAM = 400;
public static final int UNAUTHORIZED_USER = 401;
public static final int FORBIDDEN_USER = 403;
public static final int DUPLICATED_USER = 409;
}
| StatusMessage.java
public class StatusMessage {
public static final String SUCCESS = "Success";
public static final String BAD_REQUEST = "Bad request";
public static final String INVALID_TOKEN = "Invalid token";
public static final String INVALID_PARAM = "Invalid param";
public static final String UNAUTHORIZED_USER = "Unauthorized user";
public static final String FORBIDDEN_USER = "Forbidden user";
public static final String DUPLICATED_USER = "Duplicated user";
}
이렇게 상태코드 클래스, 상태메세지 클래스를 만들고 예외 부분에 ResponseEntity의 인자값으로 넣어 처리해주었다.