728x90
반응형

1편에서는 각 컨트롤러 내부에 @ExceptionHandler 어노테이션을 사용한 익셉션 처리를 봤다.

이 방법의 단점은 해당 컨트롤러에서만 사용할 수 있고, 각 컨트롤러마다 설정을 해줘야 한다는 것이다.


두번째 방법은 @ResponseStatus 어노테이션과 'CustomException' 클래스를 만들어 사용하는 방법이다. (ResponseStatusExceptionResolver)


HomeController.class


@RequestMapping(value = "/home", method = RequestMethod.GET)
 public String throwCustomStatusException1(Locale locale, Model model)
 throws CustomException {
 
     logger.info("This will throw a CustomException");
 
     boolean throwException = true;
 
     if (throwException) {
         throw new CustomStatusException("This is CustomException");
     }
 
     return "home";
 }


AnotherController.class


@RequestMapping(value = "/about", method = RequestMethod.GET)
 public String throwCustomStatusException2(Locale locale, Model model)
 throws CustomException {
 
     logger.info("This will throw a CustomException");
 
     boolean throwException = true;
 
     if (throwException) {
         throw new CustomStatusException("This is CustomException");
     }
 
     return "about";
 }


CustomStatusException.class


 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
 @ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "No such Order"// 404
 public class CustomStatusException extends RuntimeException {
    // ...
 }



CustomStatusException은 RuntimeException을 상속한 커스텀 익셉션 클래스다.

@ResponseStatus 어노테이션을 사용하여 사용자에게 리턴해줄 response code와 error reason을 적어준다.



위처럼 컨트롤러 2개가 있다고 치자. 하나는 '/home', 다른 하나는 '/about' 으로 연결되는 RequestMapping이 되어 있다.

만약 두 메소드 모두 특정 상황에 404 페이지를 보여줘야 한다면 1편에서 설명한것처럼 @ExceptionHandler를 각 컨트롤러에 선언해주는 방법이 있고,

다른 한가지는 위에 선언한 CustomStatusException을 throw 해주는 방법이 있다.



throw CustomStatusException을 하게되면 CustomStatusException에 선언된 @ResponseStatus 어노테이션에 의해 공통적으로 404 페이지와 error reason을 설정할 수 있다.


단점이라면,

이렇게 할 경우 공통적으로 사용할 CustomException 클래스가 필요에 의해 지속적으로 늘어날 가능성이 있다.



* RuntimeException을 extends 받아야한다. 그냥 Exception으로 받으면 안됨. 


728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,