본문 바로가기

Back-End/Java

[Spring] @ControllerAdvice를 이용한 error 익셉션 처리

ErrorController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Controller
public class ErrorController {
    @RequestMapping(value="/errorTest.do")
    public String errorTest(HttpServletRequest request, Model model) throws Exception {
        
        logger.debug("/errorTest.do 진입");
        
        if(1==1) { //코드 에러나서 넣은 if문
            throw new Exception("errorTest.do에서 에러발생");    
        }
        
        return null;
    }
}
cs


강제적인 에러발생을 위한 클래스파일입니다.

에러가 발생했을 경우,

'/errorTest.do'라는 로그가 기록되고, '/errorTest.do에서 에러발생'이라는 에러메시지가 생성됩니다.



CommonError.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@ControllerAdvice //error가 발생했을때 catch하는 Class
public class CommonError {
    private static final Logger logger = LoggerFactory.getLogger(CommonError.class);
    
    private final String VIEW_PATH_DIR = "/error/";
 
    @ExceptionHandler({Exception.class})
    public ModelAndView getCommonException(Exception e, HttpServletRequest request) {
        
        ModelAndView mv = new ModelAndView();
        mv.addObject("errorMessage", e.getMessage());
        mv.setViewName(VIEW_PATH_DIR + "error");
        
        return mv;
    }
}
 
cs


로직을 처리하면서 에러가 발생했을 경우 catch하여 익셉션처리하는 클래스입니다.

※ 404 에러는 위의 코드로 처리가 불가합니다!(web.xml에서 설정하여 처리해야 함)

ModelAndView에 에러메시지를 추가하고 error/error.jsp로 리턴해줍니다.



error/error.jsp

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>error</title>
</head>
<body>
    에러메세지: ${errorMessage}
</body>
</html>
cs


ErrorController에서 리턴받은 메시지를 출력하는 jsp페이지입니다.



결과화면

로그에 /errorTest.do 진입이라고 찍혀있습니다.



error.jsp에 에러메시지가 출력되었습니다.