2-28 예외처리(2) - 이론

서현우·2022년 5월 15일
0

스프링의정석

목록 보기
28/85

@ExceptionHandler와 @ControllerAdvice

예외 처리를 위한 메서드를 작성하고 @ExceptionHandler를 붙인다.

@ControllerAdvice로 전역 예외 처리 클래스 작성 가능(패키지 지정 가능)
예외 처리 메서드가 중복인 경우, 컨트롤러 내의 예외 처리 메서드가 우선.

@ResonseStatus

응답 메세지의 상태 코드를 변경할 때 사용

  1. 예외 처리 메서드
    예외처리를 하면 200(성공)이 나옴. --> 405로 변경
@ResonseStatus(HttpStatus.METHOD_NOT_ALLOWED) //405 Method Not Allowed.
@ExceptionHandler({NullPointerException.class, ClassCastException.class}) {
public String catcher2(Exception ex, Model m)
	m.addAttribute("ex", ex);
	return "error";
}
  1. 사용자 정의 예외 클래스
    사용자 정의 예외 클래스는 기본 500(디폴트). --> 400으로 변경
@ResponseStatus(HttpStatus.BAD_REQUEST) //400 Bad Request.
class MyException extends RuntimeException {
	MyExeption(String msg) {
		super(msg);
	}
	
	MyException() {
		this("");
	}
}

- web.xml

상태 코드별 뷰 맵핑

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

SimpleMappingExceptionResolver

예외 종류별 뷰 맵핑에 사용. 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.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

스프링의 예외처리 기본전략
handlerExceptionResolver
1. ExceptionHandlerExceptionResolver
2. ResponseStatusExceptionResolver
3. DefaultHandlerExceptionResolver

스프링에서의 예외 처리

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

0개의 댓글