2016년 7월 17일 일요일

[스프링MVC]@ExceptionHandler, @ControllerAdvice 컨트롤러 예외처리예제 - 스프링실무교육학원

[스프링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  클릭하여 실행하자

댓글 없음:

댓글 쓰기