[스프링MVC]@ExceptionHandler, @ControllerAdvice 컨트롤러 예외처리예제 - 스프링실무교육학원
<!--[if !supportLists]-->n <!--[endif]-->@ExceptionHandler : 스프링 MVC에서는 에러나 예외를 처리하기 위한 특별한 방법을 제공하는데 @ExceptionHandler 어노테이션을 이용하면 된다. 스프링 컨트롤러에서 정의한 메소드(@RequestMapping)에서 기술한 예외가 발생되면 자동으로 받아낼 수 있다. 이를 이용하여 컨트롤러에서 발생하는 예외를 View단 JSP등으로 보내서 처리할 수 있다.
<!--[if !supportLists]-->n <!--[endif]-->@ControllerAdvice : @ControllerAdvice는 스프링3.2 이상에서 사용가능하며 @Controller 나 스프링 4.0이상에서 지원하는 @RestController 에서 발생하는 예외 등을 catch하는 기능을 가지고 있다. 클래스 위에 @ControllerAdvice를 붙이고 어떤 예외를 잡아낼 것인지 내부 메소드를 선언하여 메소드 상단에 @ExceptionHandler(예외클래스명.class) 와 같이 기술한다. 스프링4.0이상에서는 특정한 컨트롤러만 지정해서 캐치할 수 있다.
“springmvcexception” 이라는 이름으로 File -> New -> Spring Legacy Project -> Spring MVC 프로젝트를 생성하고 top level package명을 a.b.springmvcexception 이라고 입력하자.
[pom.xml]
Spring Framework 버전이 4.X 아래라면 수정하자.
<properties>
……
<org.springframework-version>4.2.4.RELEASE</org.springframework-version>
……
</properties>
[HomeController.java]
package a.b.springmvcexception;
import java.io.IOException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HomeController {
@RequestMapping(value = "/")
public String hello() throws IOException {
// 뷰이름 이름, hello.jsp 호출
return "home";
}
@RequestMapping(value = "/test")
public String test() throws IOException {
{
throw new IOException("occured IOException...");
}
}
}
[ExceptionControllerAdvice.java]
package a.b.springmvcexception;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice
public class ExceptionControllerAdvice {
@ExceptionHandler(Exception.class)
public ModelAndView exception(Exception e) {
ModelAndView mav = new ModelAndView("exception");
mav.addObject("name", e.getClass().getSimpleName());
mav.addObject("message", e.getMessage());
return mav;
}
}
[ webapp/WEB-INF/views/home.jsp]
<html>
<head>
<title>Spring MVC Exception Handling</title>
</head>
<body>
<h1>Spring MVC Exception Handling</h1>
<a href="/test">Click here to test Exception handling</a>
</body>
</html>
[ webapp/WEB-INF/views/exception.jsp]
<html>
<head>
<title>Spring MVC Exception example</title>
</head>
<body>
<h1>Error Handing Page</h1>
<b>${name}</b>: ${message}
</body>
</html>
[실행]
프로젝트에서 우쪽 마우스 버튼 -> Run as -> Run On Server 클릭 후 STS에 기본적으로 내장되어 있는 Pivotal tc Server를 선택하고 Finish를 클릭하여 실행하자
댓글 없음:
댓글 쓰기