스프링 ch2-27, ch2-28

서현우·2022년 7월 4일
0

스프링의정석

목록 보기
67/85

ch2-27, ch2-28 - 예외처리

  • @ExceptionHandler, @ControllerAdvice
  • @ResponseStatus
  • isErrorPage="true", pageContext.exception
  • web.xml - <error-page>
  • servlet-context.xml - SimpleMappingExceptionResolver
  • 스프링에서의 예외 처리 방법 정리

예외처리

예외처리를 위한 메서드를 작성하고, @ExceptionHandler를 붙인다.
@ControllerAdvice로 전역 예외 처리 클래스를 작성할 수 있다.
(패키지 지정 가능)
예외처리 메서드가 중복된 경우, 컨트롤러 내의 예외 처리 메서드가 우선.

error.jsp

isErrorPage가 true면 pageContext.exception사용 가능하지만, 상태코드를 강제로 500으로 만든다.

<%@ page contentType="text/html;charset=utf-8"  isErrorPage="true" %>

@ResponseStatus

응답 메세지의 상태 코드를 변경할 때 사용한다.
1. 예외처리 메서드 앞에 붙여서 응답 코드를 변경.
예외가 처리되면 응답메세지가 200(성공)이 나오므로, 400이나 500으로 변경해줘야한다.
2. 사용자 정의 예외 클래스에 사용.(MyException)
사용자 정의 예외 클래스는 기본 응답코드가 500이므로, @ResponseStatus로 변경할 수 있다.

web.xml - <error-page>

상태 코드별 뷰 맵핑을 할 수 있다.

<error-page>
	<error-code>400</error-code>
	<location>/error400.jsp</location>
</error-page>
<error-page>
	<error-code>500</error-code>
	<location>/error500.jsp</location>
</error-page>

servlet-context.xml - SimpleMappingExceptionResolver

예외 종류별로 맵핑 할 수 있다.
뷰 컨트롤러와 비슷하게, 다른 작업 없이 에러뷰를 보여주는 역할만 한다.

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

ExceptionResolver

3개의 스프링 기본 전략이 DispatcherServlet.properties에 정의되어있다.
1.ExceptionHandlerExceptionResolver
2.ResponseStatusExceptionResolver
3.DefaultHandlerExceptionResolver

스프링에서의 예외 처리

  • 컨트롤러 메서드 내에서 try-catch로 처리
  • 컨트롤러에 @ExceptionHandler메서드가 처리
  • @ControllerAdvice클래스의 @ExceptionHandler메서드가 처리
  • 예외 종류별로 뷰 지정 - servlet-context.xml - SimpleMappingExceptionResolver
  • 응답 상태 코드별로 뷰 지정 - web.xml - <error-page>
profile
안녕하세요!!

0개의 댓글