MVC - 예외처리

이지윤·2022년 4월 14일
0

예외처리

Spring MVC에서의 예외처리

  • 컨트롤러 별로 예외처리
    • 컨트롤러의 메소드에서 예외가 발생 시 처리를 정의
    • 별도의 예외 처리 메소드 정의
    • 그 메소드에 @ExceptionHandler 설정
  • 하나의 웹 애플리케이션 안에서 공통된 예외 처리 클래스 정의
    • 복수의 컨트롤러에서 사용할 수 있는 공통된 예외 처리 클래스 정의
    • 공통된 예외 처리 클래스 정의
    • 그 클래스에 @ComtrollerAdvice 설정

예외처리 예제

ControllerAdvice 클래스 작성

  • MemberControllerAdvice
package org.tukorea.web.exception;

import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.http.HttpStatus;
@Component
@ControllerAdvice
public class MemberControllerAdvice {
	@ExceptionHandler(Exception.class)
	@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
	public String handleException(Exception e) {
		e.printStackTrace();
		return "member/error";
	}
	@ExceptionHandler(DataNotFoundException.class)
	public String handlerException(DataNotFoundException e) {
		e.printStackTrace();
		return "member/not_found";
	}
}
  • DataNotFoundException.java
package org.tukorea.web.exception;

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);
	}
}

ControllerAdvice 클래스

  • @Component 설정 -> component-sacn 빈 등록
  • @ControllerAdvice -> 예외처리 클래스 선언
  • @ExceptionHandler -> 특정 예외를 처리할 메소드임을 선언

예외처리 테스트 케이스

  • 학생 목록에 없는 계정을 호출할 때
  • 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>  
	<c:url value="/member/list" var="url"/>
	<a href="${url}">학생목록  화면가기</a>
</body>
</html>

profile
초보자

0개의 댓글