@ControllerAdvice를 이용한 예외처리

김서아·2024년 3월 8일

OZ의 집

목록 보기
1/2

https://velog.io/@hanblueblue/Spring-ExceptionHandler


@ControllerAdvice
public class ExceptionController {

	@ExceptionHandler(NullPointerException.class)
	public String handleNullPointerException(NullPointerException ex, HttpServletRequest req) {
		req.setAttribute("msg", ex.getMessage());
		req.setAttribute("url", req.getRequestURL());
		return "exception";
	}

	// 메서드나 생성자에 부적절한 인자가 전달되었을 때 발생
	@ExceptionHandler(IllegalArgumentException.class)
	public String handleIllegalArgumentException(IllegalArgumentException ex, HttpServletRequest req) {
		req.setAttribute("msg", ex.getMessage());
		req.setAttribute("url", req.getRequestURL());
		return "exception";
	}
	
    // 컨트롤러 메서드에서 선언한 경로 변수가 누락되었을 때 발생
	@ExceptionHandler(MissingPathVariableException.class)
	public String handleMissingPathVariableException(MissingPathVariableException ex, HttpServletRequest req) {
		req.setAttribute("msg", ex.getMessage());
		req.setAttribute("url", req.getRequestURL());
		return "exception";
	}

	// 보안 관련 예외로, 요청이 서버의 보안 설정에 의해 거부되었을 때 발생
	@ExceptionHandler(RequestRejectedException.class)
	public String handleRequestRejectedException(RequestRejectedException ex, HttpServletRequest req) {
		req.setAttribute("msg", ex.getMessage());
		req.setAttribute("url", req.getRequestURL());
		return "exception";
	}

	// 클라이언트가 컨트롤러에서 지원하지 않는 HTTP 메서드 (ex: POST 대신 GET 사용)로 요청을 보냈을 때 발생
	@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
	public String handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException ex,
			HttpServletRequest req) {
		req.setAttribute("msg", ex.getMessage());
		req.setAttribute("url", req.getRequestURL());
		return "exception";
	}

	// Static resourse(ex: css, javascript, 이미지)를 찾을 수 없을때 발생
    //하지만 스프링 프레임워크에 내장된 예외가 아님 	
    //ResourceNotFoundException를 처리하려는 의도일 경우 적절한 예외 타입으로 대체해야 함
	@ExceptionHandler(NoResourceFoundException.class)
	public String NoResourceFoundException(NoResourceFoundException ex, HttpServletRequest req) {
		req.setAttribute("msg", ex.getMessage());
		req.setAttribute("url", req.getRequestURL());
		return "exception";
	}
}

✏️ @ControllerAdvice

  • 전역적으로 예외처리를 적용하는데 사용
  • 즉, 예외 처리를 중앙집중화하여 Controller Class가 비즈니스 로직에 더 집중할 수 있게 하며, 예외 처리 코드의 중복을 줄이는데 도움을 준다.

✏️ @ExceptionHandler

  • 처리하고자 하는 예외 유형을 지정

0개의 댓글