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에서)

 

 


참고 :

남궁성, 스프링의 정석