Spring - Exception 처리

하승·2022년 7월 11일
0

웹 개발반 - Spring

목록 보기
6/8
post-thumbnail

Exception 처리

@ExceptionHandler 와 @ControllerAdvice를 이용한 처리

@ControllerAdvice

	예외 사항을 전부 핸들링 해야 한다면 중복적이고 많은 양의
	코드를 작성해야 하지만, 공통적인 예외사항에 대해서는 별도로
	@ControllerAdvice를 이용해서 분리한다. AOP를 이용하는 방식이다.

@ExceptionHandler

	발생하는 예외의 타입별로 흐름을 나눠줄 때 사용하는 매핑방식
   

ex)

예외를 발생시키기 위한 메소드를 하나 추가한다.

@GetMapping("ex05")
	public void ex05(){
		String str = null;
		str.charAt(10);
	}
//해당 객체가 스프링의 컨트롤러에서 발생하는 예외를 처리하는 존재임을 명시
@ControllerAdvice
@Log4j
public class CommonExceptionAdvice {
	@ExceptionHandler(Exception.class)
	public String exception(Exception e, Model model) {
		log.error("======Excepiton======");
		log.error(e.getMessage());
		model.addAttribute("exception",e);
		return "error_page";
	}
  }

예외 발생시 이동할 error_page.jsp 파일도 만들어준다.
에러 페이지를 만들기위해 el문에서 exception 뒤에 .stackTrace를 추가해준다.
*stack trace는 프로그램에서 익셉션이 발생한 위치를 정확하게 알려줍니다.

<%@ 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>
<html>
<head>
<meta charset="UTF-8">
<title>오류 페이지</title>
</head>
<body>
	<h2 style="background-color: black; color:yellow;">치명적인 오류 발생</h2>
	<ul style="color:red;">
		<c:forEach var="stack" items="${exception.stackTrace}">
			<li>${stack}</li>
		</c:forEach>
	</ul>
</body>
</html>

이제 서버를 키고 브라우저를 켜서 localhost:9090/ex01/sample/ex05 주소로 이동하게되면

이런식으로 오류페이지로 이동하는 것을 볼 수가 있다.

profile
화이팅!

0개의 댓글