이렇게 예외를 따로 만들었으며, 이를 통해 예외처리를 조금 더 직관적이게 만들 수 있었다.
일단, 이전에 만들었던 것을 어떻게 이용할 것인가?
Exception이라는 것은 결국, Response에서 요청에 대해 실패했음을 알려주어야 한다. 결국, Response.failure를 반환하게 되는 것이다.
이를 어떻게 활용하는 것일까?
@RestControllerAdvice
public class ExceptionAdvice {
@ExceptionHandler(NeedToLoginException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public Response needToLoginException(){
return Response.failure(403, "인증이 되어있지 않습니다. 로그인하세요.");
}
@ExceptionHandler(NotRightAuthenticationException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public Response notRightAuthenticationException(){
return Response.failure(403, "인증 정보가 존재하지 않습니다. 다시 로그인해주세요");
}
}
이런식으로 RestController, Exception, ResponseStatus의 어노테이션을 두고, 내부에 코드들이 있다.
일단, 각 에러 코드에 대해서는 구글링을 통해, 어떤 에러는 어떤 코드로 나오는게 규약인지 찾아보면서 쓰고있다.
하지만, 결국 각 상황에 따라 반환에 달라지는 것은 에러코드, 출력 문구, 그리고 Exception클래스명이다.
코드와 문구는 Response생성자에서 추가로 만들어질 수 있다.
하지만, 클래스는 다 다르게 만들어주어야 한다.
이를 위해, 기존의 Exception을 extends하는 내 Exception을 추가로 만들었다.
public class NeedToLoginException extends RuntimeException{}
이런식으로 예외를 만들어, 이걸 던지게 했다.
만들어진 예외들을 가지고, 각 상황에 맞는 다양한 예외처리를 수행할 수 있게 된다.
또한, 나중에 컨트롤러에서 예외를 던저야 할 수 있는데, 이 부분에서 코드를 더 깔끔하게 만들 수 있다는 장점이 있다.
(깔끔한게 유지보수도 더 좋다.)
'스프링 공부 > 게시판 프로젝트 만들기' 카테고리의 다른 글
[스프링] 8. JWT를 구현하기. 1단계: 일단 JWT를 위한 토큰을 만들자. (2) (1) | 2023.01.06 |
---|---|
[스프링] 7. JWT를 구현하기. 1단계: 일단 JWT를 위한 토큰을 만들자. (1) (0) | 2023.01.06 |
[스프링] 5. SecurityUtil 예외처리를 커스텀 해보자(부제: 1단계, Response만들어주기) (0) | 2023.01.02 |
[스프링] 4. SecurityConfig에 대한 유틸 추가하기 (0) | 2023.01.01 |
[스프링] 3. swagger ui 적용시키기(2) (0) | 2022.12.31 |