API 호출하며 생기는 에러에 대한 공통 처리를 해주기 위해 ExceptionAadvice를 선언합니다.
- @RestControllerAdvice : Exception 발생 시 JSON으로 반환받기 위하여 생성합니다.
- @ExceptionHandler: Bean에서 발생하는 에러를 잡아 처리합니다.
/**
* @Class : ExceptionAdvice
* @Description : 도메인에 대한 공통 에러 처리
**/
@RestControllerAdvice
@RequiredArgsConstructor
@Slf4j
public class ExceptionAdvice {
private final ResponseService responseService;
@ExceptionHandler(ExpiredAccessTokenException.class)
public ResponseEntity<CommonResult> expiredAccessTokenException(ExpiredAccessTokenException e) {
CommonResult commonResult = responseService.getFailResult(CommonResponse.EXPIREDACCESSTOKEN);
log.error("[ERROR]:ExpiredAccessTokenException");
return new ResponseEntity<>(commonResult, HttpStatus.UNAUTHORIZED);
}
}
[ExpiredAccessTokenException.class]: 에러 클래스 선언
/**
* @Class : ExpiredAccessTokenException
* @Description : 액세스 토큰 만료 에러 처리
**/
public class ExpiredAccessTokenException extends RuntimeException {
public ExpiredAccessTokenException() {
super();
}
}
[throw new로 에러 던지기]
throw new ExpiredAccessTokenException();
[orElseThrow로 에러 던지기]
find 메소드를 통해 조회를 하게 되면 반환 타입이 Optional로 설정됩니다. 따라서 Optional을 orElseThrow로 처리한 후에 마음껏 객체를 쓰는 방법이 쉽고 편한 방법이 되겠습니다.
/**
* @Method : findAccountByAccessToken
* @Description : 액세스 토큰으로 계정 조회
* @Parameter : [accessToken]
* @Return : Account
**/
public Account findAccountByAccessToken(String accessToken) {
return accountRepository.findAccountByAccessToken(accessToken).orElseThrow(NotFoundException::new);
}
'스프링 부트 > A-ger' 카테고리의 다른 글
[A-ger] Rest Api 응답 데이터 구조화하기 (0) | 2022.03.02 |
---|---|
스프링 커버링 인덱스로 페이징 성능 개선하기 (0) | 2022.02.18 |
스프링 레디스 최근 검색어 관리하기 (0) | 2022.02.10 |
스프링 Redis로 캐시 처리하기 조회 수, 방문자 수 업데이트 (0) | 2022.02.08 |
스프링 무한스크롤 페이징 검색 처리 및 동적쿼리 적용하기 (0) | 2022.02.07 |
댓글