Spring의 정석
SpringMVC 9 ( 예외처리 )
simplism
2023. 3. 14. 01:23
1.@ ExceptionHandler와 @ControllerAdvice
@ExceptionHandler
@Controller 안에 예외처리를 위한 메서드를 작성하고, @ExcetionHandler를 붙인다.
@ControllerAdvice
@ControllerAdvice로 전역 예외 처리 클래스 작성 가능(패키지 지정가능)
예외 처리 메서드가 중복된 경우, 컨트롤러 내의 예외 처리 메서드가 우선 (더 가까운쪽이 우선)
※ 전역이란 모든 컨트롤러를 말함
2. ResponseStatus (상태코드변경)
상태코드 에러 종류
HTTP response status code | description |
||
400 | Bad_Request | 잘못된요청 | |
401 | Unauthorized | 권한없음 | |
403 | Forbidden | 허용불가 | |
404 | Not Found | view 못찾음 | |
405 | Method Not Allowed | 메서드 허용 x | |
... | ... | ... | |
500 (default) | Internal Server Error | 서버에러 | |
501 | Not Implmented | 구현되지않음 | |
503 | Service Unavilable | 서비스 사용 x | |
... | ... | ... |
언제 사용하는가??
① 예외처리 메서드에 사용
② 사용자 정의 예외클래스에 사용 ( 내맘대로 상태코드를 바꾸고 싶을때 )
error.jsp
3. <error-page> : 에러상태 코드별 view 맵핑 ( web.xml )
4. SimpleMappingExceptionResolver :
예외종류별 뷰 맵핑에 사용 (sevlet-context.xml 에 등록)
※ 에러뷰페이지의 isErrorPage="true→ false 로셋팅 필수!
<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.fastcampus.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>
※ 에러뷰 페이지의 isErrorPage="true" 이면 jsp의 특징때문에 상태에러코드를 400으로 설정했으나, 500으로 결과 발생.
해결을위해 , isErrorPage="true→ false"
5. ExceptionResolver ( 예외발생시 처리과정 )
6. 스프링에서의 예외처리
① 컨트롤러 메서드 내에서 try-catch로 처리
② 컨트롤러에 @ExceptionHandler 메서드가 처리
③ @ControllerAdvice클래스의 @ExceptionHandler메서드가 처리 ( 공통처리 )
④ 예외 종류별로 뷰지정 - SimpleMappingExceptionResolver
⑤ 응답 상태 코드별로 뷰지정 - <error-page> (web.xml에서)
참고 :
남궁성, 스프링의 정석