[Spring] 9 - 예외처리(Exception)
by me
해당 게시글의 전체 소스코드는 이곳 Github를 참고해 주세요
목차
- 예외 처리 동작 이해하기
Spring MVC에서의 예외 처리
- 컨트롤러 별로 예외 처리
- 컨트롤러의 메서드에서 예외가 발생했을 때의 처리를 정의
- 별도의 예외 처리 메서드를 정의하고 그 메서드에 @ExceptionHandler 애노테이션 설정
- 하나의 웹 애플리케이션 안에서 공통된 예외 처리
- 복수의 컨트롤러에서 사용할 수 있는 공통된 예외 처리 클래스를 정의
- 공통된 예외 처리 클래스를 정의하고 그 클래스에 @ControllerAdvice 애노테이션을 설정
ControllerAdvice 클래스
- @Component 설정 은 component-scan 을 통해 빈으로 등록
- @ControllerAdvice 는 예외처리 클래스임을 선언
- @ExceptionHandler 는 특정 예외를 처리할 메서드임을 선언
예외 처리 설정하기
- servlet-context.xml
<context:component-scan base-package="org.doorisopen.myspring.excption" />
- MemberServiceImpl.java
...
public MemberVO readMember(String id) throws Exception {
if(memberDAO.read(id) == null) throw new DataNotFoundException(id);
return memberDAO.read(id);
}
...
org.doorisopen.myspring.exception
- MemberControllerAdvice.java 내용
@Component
@ControllerAdvice
public class MemberControllerAdvice {
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public String handleException(Exception e) {
e.printStackTrace();
return "exception/error";
}
@ExceptionHandler(DataNotFoundException.class)
public String handleException(DataNotFoundException e) {
e.printStackTrace();
return "exception/not_found";
}
}
- DataNotFoundException.java 내용
public class DataNotFoundException extends Exception {
private static final long serialVersionUID = 1000L;
public DataNotFoundException() {
}
public DataNotFoundException(String msg) {
super(msg);
}
public DataNotFoundException(Throwable th) {
super(th);
}
}
- views -> exception -> error.jsp
<%@ 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>Exception ERROR</title>
</head>
<body>
예외 클래스 : ${exception.getClass().name} <br>
메시지 : ${exception.message}
</body>
</html>
- views -> exception -> not_found.jsp
<%@ 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>DataNotFoundException</title>
</head>
<body>
<h1>DataNotFoundException</h1>
</body>
</html>
References
- 대학교 웹 프레임워크 수업 정리한 내용 입니다.