인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

pbs0216님의 프로필 이미지

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

HandlerExceptionResolver 시작

exceptionResolver에서 null 반환

작성

·

36

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)

[질문 내용]

 

@Slf4j

public class MyHandlerExceptionResolver implements HandlerExceptionResolver {

@Override

public ModelAndView resolveException(HttpServletRequest request,

HttpServletResponse response, Object handler, Exception ex) {

try {

if (ex instanceof IllegalArgumentException) {

log.info("IllegalArgumentException resolver to 400");

response.sendError(HttpServletResponse.SC_BAD_REQUEST,

ex.getMessage());

return new ModelAndView();

}

} catch (IOException e) {

log.error("resolver ex", e);

}

return null;

}

}
만약 HandlerExceptionResolver에서 null을 반환하게 되면은.. 그러면 스프링 기본 로직인 basicErrorController에서 /error 를 호출해서 해결하게 되는 것이 아닌가요? 

 

basicErrorController를 거치지 않고 그냥 WAS로 예외가 던져지나요?

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.
pbs0216님,

HandlerExceptionResolver에서 null을 반환하면 스프링의 기본 로직에 따라 BasicErrorController가 예외를 처리하게 됩니다. 이는 /error 맵핑을 통해 에러를 처리하는 것을 의미합니다. 따라서 HandlerExceptionResolvernull을 반환하면, 기본적으로 BasicErrorController가 활성화되어 있는 경우 해당 컨트롤러로 요청이 넘어가게 됩니다.

하지만, 만약 BasicErrorController가 구성되어 있지 않거나 해당 맵핑이 설정되어 있지 않은 경우, 예외는 그대로 WAS(Web Application Server)로 전파될 수 있습니다. 이 경우 서버의 기본 에러 처리가 이루어질 것이며, 이는 일반적으로 에러 페이지로 리다이렉트되는 형태로 나타납니다.

이를 통해 HandlerExceptionResolver가 실제로 어떻게 동작하고 전체적으로 어떤 예외 처리 흐름을 따르는지 이해할 수 있습니다. 기본적인 스프링의 예외 처리 흐름을 수정하려면 ErrorController를 구현하거나 @ControllerAdvice를 사용하는 등의 방법으로 직접 에러 핸들링을 커스터마이징할 수 있습니다.

더 궁금한 점이 있으시면 언제든지 질문해 주세요!

참고링크: 스프링 MVC의 기본적인 예외 처리 흐름

pbs0216님의 프로필 이미지

작성한 질문수

질문하기