본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : @ControllerAdvice실습 공부

by 오주현 2022. 3. 11.
반응형

@ControllerAdvice

@ExceptionHandler를 사용해 예외를 처리했지만 정상 코드와 예외 처리 코드가 하나의 컨트롤러에 있어서 분리하는 수업을진행했다.

 

@Slf4j
@RestControllerAdvice(basePackages = "hello.exception.api")
public class ExControllerAdvice {

@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(IllegalArgumentException.class)
public ErrorResult illegalExHandler(IllegalArgumentException e) {
    log.error("[exceptionHandler] ex", e);
    return new ErrorResult("BAD", e.getMessage());
}

@ExceptionHandler
public ResponseEntity<ErrorResult> userExHandler(UserException e) {
    log.error("[exceptionHandler] ex", e);
    ErrorResult errorResult = new ErrorResult("USER-EX", e.getMessage());
    return new ResponseEntity(errorResult, HttpStatus.BAD_REQUEST);
}

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler
public ErrorResult exHandler (Exception e) {
    log.error("[exceptionHandler] ex", e);
    return new ErrorResult("EX", "내부 오류");
}
}

컨트롤러를 새로 만들고 예외 처리 코드만 싹 가져왔다.

 

이렇게 해도 예외 처리가 정상적으로 동작하는 것을 확인할 수 있었다.

 

@ControllerAdivce는 대상으로 지정한 여러 컨트롤러에 ExceptionHandler와 InitBinder 기능을 부여해 준다. 만약 대상을 지정하지 않으면 모든 컨트롤러에 적용되고 이번에는 패키지 경로로 적용해서 실습을 진행해 봤다. 즉, 특정 클래스를 지정해서도 사용할 수 있는 것이다.


스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.

반응형

댓글