JAVA의 @ExceptionHandler

단비·2023년 5월 19일
0

학습

목록 보기
58/66

예외 처리 과정

프로그래밍에서 예외 처리는 아주 중요하면서도 아주 어렵다.

과하다할 만큼 상세하고 다양하게 예외를 잡아 처리해준다면, 클라이언트도 그렇고 서버도 그렇고 더 안정적인 프로그램이 될 수 있게 도와준다.

예외 처리 하는 방법

  • 메서드 내에서 예외 상황을 예측해서 처리하는 try-catch문을 이용하는 방법
  • 요구사항에 의한 예외 처리
    (ex. validation > 특정 값이 0~255범위가 아니면 유효하지 않은 값으로 판단하고 예외 처리)
  • 스프링 시큐리티에서 인터셉터로 잡아서 UnauthorizedException 같은 예외 처리





@ExceptionHandler

@Controller, @RestController가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메소드에서 처리해주는 기능

사용 방법

  • 컨트롤러에서 선언하는 방법
@RestController
@RequestMapping("/")
public class MainController {
	...
    
	@ExceptionHandler({NullPointerException.class})
    public Object nullEx(Exception e) {
    	...
        
        return "userService";
    }
  • Exception 처리 클래스를 따로 생성하는 방법
    • ControllerAdvice()의 변수에 패키지 제한을 둘 수 있음
@ControllerAdvice("com.task.controller")
public class ExceptionHandlers {

    @ExceptionHandler({NullPointerException.class})
    public Object nullEx(Exception e) {
    	...
        
        return "userService";
    }
}




@ControllerAdvice

  • @Controller 어노테이션이 있는 모든 곳에서의 예외를 잡을 수 있도록 해줌
  • 속성 설정을 통하여 원하는 컨트롤러나 패키지만 선택할 수 있음

@RestControllerAdvice

  • @ControllerAdvice와 동일한 역할을 하지만 객체를 반환할 수 있음
    (@RestController, @Controller 둘 다 적용 가능)

@ControllerAdvice + @ResponseBody → @RestControllerAdvice








💡 TIPS!

임의로 Exception을 생성하기

RuntimeException를 상속받은 클래스를 생성
필요 시 생성자로 받을 변수 선언

@Getter
@AllArgsConstructor
public class CustomException extends RuntimeException {
    private final ErrorCode errorCode;
}

사용 시 일반적인 Exception 처럼 사용 가능

throw new CustomException(ErrorCode.ERROR)





참고 사이트

@ControllerAdvice, @ExceptionHandler를 이용한 예외처리 분리, 통합하기(Spring에서 예외 관리하는 방법, 실무에서는 어떻게?) - 기본기를 쌓는 정아마추어 코딩블로그
[스프링부트] @ExceptionHandler를 통한 예외처리 - Help!

profile
tistory로 이전! https://sweet-rain-kim.tistory.com/

0개의 댓글