>> @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 |