본문 바로가기
dev/Spring

[Spring] 예외처리2

by dev_Step 2022. 6. 14.

>> @ControllerAdvice 모든 컨트롤러에서 발생하는 에러처리를 하며, 만약 컨트롤러내 에러 처리하는 

@ExceptionHandler이 있다면 가까운 @ExceptionHandler에서 처리가 된다.

 

@ControllerAdvice("패키지 지정/ Default 전체")

          @ExceptionHandler("처리할 예외클래스 지정")

 

 

@ResponseStatus(HttpStatus.~)

 >> 예외처리 매서드 앞에붙인다. 

 >> 예외처리 코드를 바꿀때 사용한다.  200번 --> 400번대 혹은 500번대로 변경해주는것

 >> 사용자 정의 예외클래스 만들때 앞에 붙일수 있다. 디폴트인 500번대를 -> 원하는 에러코드로 변경가능

메서드 에러코드 바꾸기
클래스 앞에 에러코드 바꾸기

 

>> web.xml 을 통해서 error 페이지 추가해주는 방법으로 Tomcat이 가지고 있는 기본 페이지 말고

상태 코드별로 내가 지정한 페이지가 출력이 된다.

>> servlet-context.xml 등록하는 방법으로 예외 종류별 뷰 맵핑 방법이다.

<beans:bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<beans:property name="defaultErrorView" value="error"/>
    		<beans:property name="exceptionMappings">
      			<beans:props>
        			<beans:prop key="com.start.ch2.MyException">error400</beans:prop>
      			</beans:props>
    		</beans:property>
		<beans:property name="statusCodes">
			<beans:props>
        			<beans:prop key="error400">400</beans:prop>
			</beans:props>
		</beans:property>
  	</beans:bean>

 

 

>> JSP 에서 Error 페이지 임을 나타내면 Exception객체의 참조변수를 모델에 넘기지 않아도 사용할 수 있다.

>> 이때 exception에 접근하기 위해서는 pageContext 를 통해서 접근한다.

 

 

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

ExceptionResolver

처리순서

1>> Client 의 요청   ~/ch2/ex

2>> DispatcherServelt --> Controller 예외발생시

3>>  Controller는 자신을 호출한 쪽으로 예외를 전달하고  --> DispatcherServelt

4>> DispatcherServelt는 예외처리를 하기위하여  handlerExceptionResolver에 등록된 예외들을 확인한다.

  >> 예외처리 기본전략

       --- ExceptionHandlerExceptionResolver 

              >> ExceptionHandler, ControllerAdvice 어노테이션 확인

       --- ResponseStatusExceptionResolver

              >> 상태 코드 바꾸는 어노테이션 확인 및 web.xml에 상태코드에 지정된 jsp 있는지 확인 후 응답

       --- DefaultHandlerExceptionResolver

 

 

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

 

마지막으로 정리

예외처리방법

1. 컨트롤러 내에서 try-catch문으로 처리

2. 컨트롤러에 @ExceptionHandler가 처리

3. @ControllerAdvice클래스의 @ExceptionHandler메서드가 처리

4. 예외 종류별로 뷰 지정 - SimpleMappingExceptionResolver

5. 응답 상태 코드별로 뷰지정 <error-page>

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

[Spring] 데이터 변환  (0) 2022.06.18
[Spring] Spring MVC vs RESTful  (0) 2022.06.16
[Spring] 예외처리  (0) 2022.06.13
[Spring] Session  (0) 2022.06.13
[Spring] Cookie  (0) 2022.06.09