본문 바로가기
Spring/Spring 기초

spring 어노테이션을 이용한 예외처리

by 미눅스[멘토] 2023. 8. 11.
728x90

utll패키지 및 CommonExceptionHandler 클래스 생성

 

 

CommonExceptionHandler 코드 작성

package kr.or.ddit.util;

import org.springframework.http.HttpStatus;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.NoHandlerFoundException;

import lombok.extern.slf4j.Slf4j;

//스프링에게 예외 처리하는 핸들러 클래스임을 알려줌
//ControllerAdvice : Controller와 동일한 역할  수행. 예외 발생 시 예외만 처리
//ControllerAdvice("특정패키지") -> 특정패키지 이하에서 catch되지 않은 Exception발생 시 이 클래스가 동작
//Controller에서 Exception 이 발생한 것을 DispatcherServlet -> JVM으로 가기전에 먼저 예외를 잡음
@Slf4j
@ControllerAdvice("package")
public class CommonExceptionHandler {
	//예외에 대한 내용을 Model 객체를 이용해서 뷰(View, jsp)로 전달 할 수 있음
	//사용자가 설정한 예외 타입이 해당되는 예외가 발생 시 handle()메소드에서 처리함
	//ExceptionHandler(Exception.class) : RequestMapping과 동일한 역할을 수행
//	@ExceptionHandler(Exception.class)
//	public String handle(Exception e, Model model) {
//		log.error("handle->e : " + e.toString());
//		
//		model.addAttribute("exception", e);
//		
//		//forwarding
//		return "error/errorCommon";
//	}
	
	
	
	//404만 처리하는 메소드
	@ExceptionHandler(NoHandlerFoundException.class)//핸들링된 exception일때 처리를 해주자
	@ResponseStatus(HttpStatus.NOT_FOUND)
	public String handle(Exception e, Model model) {
		log.error("handle->e : " + e.toString());
		
		model.addAttribute("exception", e);
		
		//forwarding
		return "error/error404";
	}
}

 

 

Controller에 메소드에 맞는

폴더 및 jsp생성

 

 

 

 

errorCommon.jsp 코드작성

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!--
Controller에서 받아온 메소드
model.addAttribute("exception", e);
-->
<section class="content">
	<div class="error-page">
		<h2 class="headline text-danger">${exception.getMessage()}</h2>
		<div class="error-content">
			<c:forEach var="stack" items="${exception.getStackTrace() }">
				<h3>
					<i class="fas fa-exclamation-triangle text-danger"></i>
					${stack.toString() }
				</h3>
			</c:forEach>
			<p>
				We will work on fixing that right away. Meanwhile, you may <a
					href="/">return to dashboard</a> or try using the search form.
			</p>
		</div>
	</div>
</section>

 

 

web.xml에 가서

		<!-- 404오류를 처리할 수 있도록 함 -->
		<init-param>
			<param-name>throwExceptionIfNoHandlerFound</param-name>
			<param-value>true</param-value>
		</init-param>

이 코드 작성

 

 

 

 

그리고 재가동 했을 떄 오류가 안나면 됨