스프링의 예외처리 방법들

뫄뫄(ahk)·2022년 9월 22일
0

Spring

목록 보기
13/18
post-thumbnail

스프링에서의 5가지 예외처리방법

  1. ry-catch
  2. @ExceptionHandler
  3. @ControllerAdvice의 @ExceptionHandler가 처리
  4. SimpleMappingExceptionResolver
  5. 응답 상태 코드별 뷰 매핑< error-page>

@ExceptionHandler

@ExceptionHandler(Exception.class) //()안에는 메서드가 '처리할 예외'를 작성
	public String catcher(Exception e, Model m) {
		m.addAttribute("ex", e);
		return "error";
	}
  • 클래스 내에서 발생하는 예외를 처리할 메서드에 붙이는 annotion
  • controller내의 요청을 처리하는 메서드들과 동일하게 작성하면 된다(ex. model, bindingResult 파라미터 선언 가능)
  • 한 메서드가 여러 예외를 처리하려면 ()안에 배열로 작성
  • 위의 설정이 있어야 기본 객체 pageContext.exception(el)을 사용할 수 있다
    - 단 상태 코드를 강제로 500으로 바꾼다.

@ControllerAdivce

  • 전역 예외 처리 클래스 작성(다른 기능도 있음)(@ExceptionHandler 모음)
  • @ExceptionHandler, @ControllerAdvice 중복되면 가까운 @ExceptionHandler가 처리
    공통적으로 예외처리하는 메서드는 ControllerAdvice에, 개별적으로 처리할 예외는 각 클래스의 ExceptionHandler에서 처리
  • 패키지 지정 가능 (default는 모든 패키지)
@ControllerAdvice("com.fastcampus.ch22")

@ResponseStatus

  • 응답메시지의 상태코드를 변경한다.
    1. 예외처리 메서드(@ExceptionHandler)가 예외를 처리할 때 200응답코드를 변경
    2. 사용자 정의 예외클래스의 응답 코드(default:500)를 변경할 수 있다.

SimpleMappingExceptionResolver

  • 예외 종류별 뷰매핑 가능
  • servlet-context.xml에 작성
  • error view로 응답시 error code = 200이라서 뷰페이지별 error code 지정
  • view별 상태코드 지정가능(jsp의 isErrorPage=”true”시 무조건 500으로 변경)
<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.ch22.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>
  • < error-page>, SimpleMappingExceptionResolver

→ 예외 처리를 안하고 뷰를 user friendly하게 보여줄 때

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

ExceptionResolver

  • DispatcherServlet의 handlerExceptionResolvers (List iv)기본전략 3개
    예외 처리를 할 수 있는 객체를 순서대로 돌아봄
  • ExceptionHandlerExceptionResolver
    1. annotation이 붙은 예외처리 메서드들 돌면서 처리할 수 있는 메서드 찾기
  • ResponseStatusExceptionResolver
    1. @ResponseStatus 메서드 돌면서 응답코드 변경
    2. web.xml에서 응답코드와 매핑된 뷰가 있는지 찾기
  • DefaultHandlerExceptionResolver
    1. 스프링에 정의된 예외의 상태코드(기본 500)를 상황에 따라 400,500번대로 바꿈(Tomcat의 예외처리 페이지의 에러코드가 다양한 이유)

이 게시글은 남궁성 강사님의 스프링의 정석을 듣고 요약,정리한 내용입니다.

profile
NONONONONONOYes!

0개의 댓글