코딩마을방범대
JAVA의 @ExceptionHandler 본문
728x90
예외 처리 과정
프로그래밍에서 예외 처리는 아주 중요하면서도 아주 어렵다.
과하다할 만큼 상세하고 다양하게 예외를 잡아 처리해준다면, 클라이언트도 그렇고 서버도 그렇고 더 안정적인 프로그램이 될 수 있게 도와준다.
예외 처리 하는 방법
- 메서드 내에서 예외 상황을 예측해서 처리하는 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!
728x90
'💡 백엔드 > Java' 카테고리의 다른 글
Spring Profile 설정하기 (0) | 2023.05.29 |
---|---|
HttpRequest에서 body값 가져오기 (0) | 2023.05.29 |
Java의 Interceptor (0) | 2023.05.28 |
Log - (2) Logback (0) | 2023.05.28 |
SpringBoot Custom Annotation 생성하기 - (1) 파라미터에 부여 (0) | 2023.05.28 |