| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
Tags
- demand paging
- 단어변환
- propagation
- Transaction
- CORS
- COPYOFRANGE
- type eraser
- optimistic lock
- HandlerMethod
- Generic method
- generic type
- 벌크연산
- pessimistic lock
- NestJS 요청흐름
- hoisting
- wrapper class
- assertJ
- TDZ
- ExceptionResolver
- 역정규화
- tracking-modes
- API
- SPOF
- 프로그래머스
- Java
- RequestMappingHandlerMapping
- cross-cutting concerns
- #@Transacional
- CQS
- IllegalStateException
Archives
- Today
- Total
jingyulog
HandlerExceptionResolver 본문
- 스프링 MVC 는 핸들러 밖으로 예외가 던져진 경우, 예외를 해결하고 동작을 새로 정의할 수 있는 방법을 제공한다.
- 컨트롤러 밖으로 던져진 예외를 해결하고, 동작 방식을 변경하고 싶을 때 사용한다. 줄여서 ExceptionResolver 라고 한다.
public interface HandlerExceptionResolver {
@Nullable
ModelAndView resolveException(
HttpServletRequest request, HttpServletResponse response, @Nullable Object handler, Exception ex);
}
반환 값에 따른 동작 방식
- 빈 ModelAndView
- new ModelAndView()
- View를 rendering 하지 않고, 정상 흐름으로 서블릿이 return 된다.
- ModelAndView 지정
- ModelAndView에 View, Model 등의 정보를 지정해서 반환하면 View를 rendering 한다.
- null
- null을 반환하면 다음 ExceptionResolver 를 찾아서 실행한다.
- 만약 처리할 수 있는 ExceptionResolver 가 없으면,
- 기존에 발생한 예외를 서블릿 밖으로 던진다. throw new
ExceptionResolver 활용
- 예외 상태 코드 변환
- response.sendError() 호출로 변경해서 서블릿에서 상태 코드에 따른 오류를 처리하도록 위임
- 이후 WAS 는 서블릿 오류 페이지를 찾아서 내부 호출
- response.sendError() 호출로 변경해서 서블릿에서 상태 코드에 따른 오류를 처리하도록 위임
- View Template 처리
- ModelAndView 에 값을 채우고 뷰 렌더링해서 고객에게 제공
- API 응답 처리
- response.getWriter().println("hello");
- HTTP 응답 바디에 직접 데이터를 넣어준다.
- 예외를 ExceptionResolver 에서 해결한다.
- ExceptionResolver 를 사용하면 컨트롤러에서 예외가 발생해도 ExceptionResolver 에서 예외를 처리해버린다.
- 따라서 예외가 발생해도 서블릿 컨테이너까지 예외가 전달되지 않고, 스프링 MVC 에서 예외 처리는 끝이 난다.
- 결과적으로 WAS 입장에서는 정상 처리가 된 것이다.
'Tech > 스프링' 카테고리의 다른 글
| @ExceptionHandler (0) | 2023.02.15 |
|---|---|
| 스프링 부트가 제공하는 ExceptionResolver (0) | 2023.02.15 |
| 서블릿 예외 처리 (0) | 2023.02.14 |
| API 예외 처리 - HandlerExceptionResolver (0) | 2023.02.14 |
| Dispatcher Servlet, Handler Method, RequestMappingHandlerMapping (0) | 2023.02.13 |