본문으로 바로가기

에러 컨트롤러 및 커스텁 익셉션 만들기

category Spring boot 2024. 10. 22. 10:45
학습 목표

커스텀 예외의 필요성 이해: 기본 예외 처리 방식의 한계를 인식하고, 커스텀 예외를 통해 보다 세밀한 에러 관리를 이해한다.
커스텀 예외 클래스 생성: 다양한 상황에 맞는 사용자 정의 예외 클래스를 생성하는 방법을 학습한다.
글로벌 예외 (Global Exception Handler) 구현: @ControllerAdvice와 @ExceptionHandler를 활용하여 전역적으로 예외를 처리하는 방법을 익힌다.

package com.tenco.blog_v2.common.errors;

public class Exception400 extends RuntimeException {

    // throw new Exception400("야 너 잘못 던졌어"); <-- 사용하는 시점에 호출 모습
    public Exception400(String msg) {
        super(msg);
    }
}

 

package com.tenco.blog_v2.common.errors;

public class Exception401 extends RuntimeException {
    
    public Exception401(String msg) {
        super(msg);
    }
}

 

 

생략 …

  • @ControllerAdvice: 전역적인 예외 처리를 담당하는 클래스임을 나타냅니다.
  • @ExceptionHandler: 특정 예외가 발생했을 때 실행할 메서드를 지정합니다.
  • ModelAndView: 뷰와 데이터를 함께 반환하는 객체로, 에러 페이지와 메시지를 전달합니다.

 

package com.tenco.blog_v2.common.errors;

import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

@ControllerAdvice  // IoC 대상 ( 뷰 렌더링)
public class GlobalExceptionHandler {

    /**
     * 400 Bad Request 예외 처리
     * @param ex
     * @param model
     * @return
     */
    @ExceptionHandler(Exception400.class)
    public ModelAndView handleException400(Exception400 ex, Model model) {
        // templates/err/400.mustache
        ModelAndView mav = new ModelAndView("err/400");
        mav.addObject("msg", ex.getMessage());
        return mav;
    }

    /**
     * 400 Bad Request 예외 처리
     * @param ex
     * @param model
     * @return
     */
    @ExceptionHandler(Exception401.class)
    public ModelAndView handleException401(Exception401 ex, Model model) {
        // templates/err/400.mustache
        ModelAndView mav = new ModelAndView("err/401");
        mav.addObject("msg", ex.getMessage());
        return mav;
    }

    /**
     * 400 Bad Request 예외 처리
     * @param ex
     * @param model
     * @return
     */
    @ExceptionHandler(Exception403.class)
    public ModelAndView handleException403(Exception403 ex, Model model) {
        // templates/err/400.mustache
        ModelAndView mav = new ModelAndView("err/403");
        mav.addObject("msg", ex.getMessage());
        return mav;
    }

    /**
     * 400 Bad Request 예외 처리
     * @param ex
     * @param model
     * @return
     */
    @ExceptionHandler(Exception404.class)
    public ModelAndView handleException404(Exception404 ex, Model model) {
        // templates/err/400.mustache
        ModelAndView mav = new ModelAndView("err/404");
        mav.addObject("msg", ex.getMessage());
        return mav;
    }

    /**
     * 400 Bad Request 예외 처리
     * @param ex
     * @param model
     * @return
     */
    @ExceptionHandler(Exception500.class)
    public ModelAndView handleException500(Exception500 ex, Model model) {
        // templates/err/400.mustache
        ModelAndView mav = new ModelAndView("err/500");
        mav.addObject("msg", ex.getMessage());
        return mav;
    }



}

'Spring boot' 카테고리의 다른 글

리팩토링  (1) 2024.10.23
인터셉터 만들어 보기  (5) 2024.10.22
에러 페이지 만들기  (0) 2024.10.22
@SessionAttribute 와 HttpSession을 멤버 필드로 주입 받는 것의 문제점  (0) 2024.10.18
회원 정보 수정  (0) 2024.10.10