본문 바로가기

공부 기록/Spring

[Spring] Exception Handling

  • @ControllerAdvice : Global 예외 처리 및 특정 package, Controller 예외 처리
  • @ExceptionHandler : 특정 Controller 예외 처리

 

@ControllerAdvice와 @ExceptionHandler의 활용

  

@RestControllerAdvice
public class GlobalControllerAdvice {

    @ExceptionHandler(value = Exception.class)  // 모든 예외에 대한 처리
    public ResponseEntity exception() {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("");
    }
    
    @ExceptionHandler(value = ArithmeticException.class)  // ArithmeticException에 대한 처리
    public ResonseEntity arithmeticException() {
        System.out.prinltn("Global Error");
        return responseEntity.status(HttpStatus.BAD_REQUEST).body("");
    }
    
}

  

예외 처리 대상 패키지 직접 지정

  

@RestControllerAdvice(basePackages = "com.example.controller") // 패키지 직접 지정
public class allControllerAdvice {

    ...
    
}

  

지정된 패키지 및 하위에 있는 모든 클래스에 대하여 예외를 처리할 수 있다.

  

예외 처리 대상 클래스 직접 지정

  

@RestControllerAdvice(basePackageClasses = memberController.class) // 클래스 직접 지정
public class memberControllerAdvice {

    ...
    
}

  


특정 클래스 내에서의 예외 처리

  

@RestController
@RequestMapping("/member")
public class memberController {

    ...
    
    @ExceptionHandler(value = ArithmeticException.class)
    public ResonseEntity arithmeticException() {
        System.out.prinltn("Class Error");
        return responseEntity.status(HttpStatus.BAD_REQUEST).body("");
    }
    
}

 

- memberController에 ArithmeticException에 대한 예외 처리를 핸들링하고 있다.

- GlobalControllerAdvice에서 똑같이 예외 처리가 되어 있더라도, memberController에서 발생한 ArithmeticException에 대해서는 memberController 내의 메서드가 실행된다. ("Global Error"가 아닌 "Class Error"가 콘솔에 출력된다.)

'공부 기록 > Spring' 카테고리의 다른 글

[Spring] @Data 어노테이션  (0) 2023.05.31
[Spring] Filter  (0) 2023.05.31
[Spring] Validation(2) - Custom Validation  (0) 2023.05.01
[Spring] Validation(1) - Annotation  (0) 2023.05.01
[Spring] AOP의 활용  (0) 2023.04.27