프로그램이 예상치 못한 상황을 만났을 때 오류를 발생시키는 것
REST API : RestControllerAdvice
ViewResolver : ControllerAdvice
어플리케이션의 전역적 예외 처리
REST API용으로 객체를 응답하는 방식 (주로 JSON)
옵션 값 지정으로
특정 패키지 혹은 특정 클래스에서 발생하는 예외만 처리하는 파일을 만들수도 있다.
1. 특정 패키지에서 발생하는 예외만 처리
@RestControllerAdvice(basePackages = "com.example.dice.controller")
2. 특정 클래스에서 발생하는 예외만 처리
@RestControllerAdvice(basePackageClasses = ExceptionController.class)
예외처리 우선순위
사용 방법1. RestControllerAdvice에서 전역 예외처리기로 사용
@RestControllerAdvice
public class GlobalControllerAdvice {
@ExceptionHandler(value = Exception.class)
public ResponseEntity<?> exceptionProcess(Exception e) {
log.error("============ advice ============");
log.error("message : {}", e.getLocalizedMessage());
return ResponseEntity.status(INTERNAL_SERVER_ERROR).body("");
}
}
사용 방법 2. 특정 Controller에서 전용 예외 처리기로 사용
@RestController
public class UserController {
@GetMapping
public ResponseEntity<?> get(){ ... }
@PostMapping
public ResponseEntity<?> save(){ ... }
@ExceptionHandler(value = Exception.class)
public ResponseEntity<?> exceptionProcess(Exception e) {
log.error("============ user controller ============");
log.error("message : {}", e.getLocalizedMessage());
return ResponseEntity.status(INTERNAL_SERVER_ERROR).body("");
}
}
만약,
Advice로 예외 처리를 해놓은 프로젝트에서,
Controller에 ExceptionHandler를 작성한 경우
예외 처리를
Controller의 ExceptionHandler에서 하게 된다.
만약, Controller에서 잡히지 못한 예외인 경우 Advice에서 처리 됨
view를 응답하는 방식