본문 바로가기
dev/Spring

[Spring] 예외처리

by dev_Step 2022. 6. 13.

 페이지 예외처리방법

 

1. 일단 예외를 throw new Exception() 을통해서 예외를 발생시켜 보자.

  >> 해당 예외처리에 대한 조치가 없으므로, 이것은 서버에 대한 문제기 때문에 500대 에러가 발생했다.

 

예외처리 클래스 요청시
500에러 발생

2. 1번의 문제를 해결하기 위해 try-catch 문을 통해서 예외처리해보자

try-catch 문을 쉽게하기 위해서는 

 >> 블록지정 후 > 우클릭 > Surround With > try-catch를 통해서 쉽게 처리할 수 있따.

 >> 예외 처리후에는 404 에러가 발생한 것을 확인할 수 있는데 이는 리턴 타입이 void이기 때문에 해당 요청에 쓰인 페이지를 찾을수 없기 떄문에 404가 발생했다 즉 ex.jsp를 못찾았다는 의미

 

그렇다면 에러 처리를 하기 위해서 메서드마다 Try-Catch문을 사용해야 할까?

그렇지 않다.

@ExceptionHandler 라는 어노테이션을 통해서 발생하는 에러를 한번에 처리할 수 있다.

  >> 아래와 같이 @ExceptionHandler() 어노테이션을 선언하고 해당 매개변수로 처리해야할 에러를 넣어주면된다. 

그러면 해당 에러에 대한 처리를 메서드에서 모두 처리한다.

해당 에러에 대한 내용을 JSP로 보내기 위해서는 Model 객체를 생성한 후 담아서 넘겨준다.

 

============================================================================================

 

하지만

@ExceptionHandler 의 경우는 해당 컨트롤러에서만 사용할 수 있다.

따라서 다양한 컨트롤러에 대한 예외처리는 다른 방법으로 진행되어야 한다.

 

이경우는 따로 Class를 생성하여

@ControllerAdvice 라는 애너테이션을 사용하면된다.

그러면 모든 클래스에서 발생하는 예외에 대해서 해당 클래스가 예외처리를 실시해준다.

 

>> 그렇다면 해당 컨트롤러에 있는 @ExceptionHandler와 @ControllerAdvice중에 어느게 처리하냐 하면, 가까운 곳에 있는 처리로 진행한다. 즉 해당 컨트롤러에 해당 에러에 대한 처리가 있으면 그 에러 처리 방법이 처리하고, 없다면  @ControllerAdvice이 처리해준다.

>> 또한 옵션으로 @ControllerAdvice("풀패키지명") 의 매개변수로 처리해주어야할 패키지를 지정해줄수 있다.

>> Default 는 모든 패키지이다.

 

>> 아래의 컨트롤러를 보면 /ex4, /ex5의 경우는 예외처리가 안되어 있어서 호출할 경우 에러가 발생해야 하는데

>> @ControllerAdvice에 의해서 예외처리를 해주었다.

 

'dev > Spring' 카테고리의 다른 글

[Spring] Spring MVC vs RESTful  (0) 2022.06.16
[Spring] 예외처리2  (0) 2022.06.14
[Spring] Session  (0) 2022.06.13
[Spring] Cookie  (0) 2022.06.09
[Spring] redirect, forward  (0) 2022.06.09