작성
·
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 인턴입니다.
pbs0216님,
HandlerExceptionResolver
에서 null
을 반환하면 스프링의 기본 로직에 따라 BasicErrorController
가 예외를 처리하게 됩니다. 이는 /error
맵핑을 통해 에러를 처리하는 것을 의미합니다. 따라서 HandlerExceptionResolver
가 null
을 반환하면, 기본적으로 BasicErrorController
가 활성화되어 있는 경우 해당 컨트롤러로 요청이 넘어가게 됩니다.
하지만, 만약 BasicErrorController
가 구성되어 있지 않거나 해당 맵핑이 설정되어 있지 않은 경우, 예외는 그대로 WAS(Web Application Server)로 전파될 수 있습니다. 이 경우 서버의 기본 에러 처리가 이루어질 것이며, 이는 일반적으로 에러 페이지로 리다이렉트되는 형태로 나타납니다.
이를 통해 HandlerExceptionResolver
가 실제로 어떻게 동작하고 전체적으로 어떤 예외 처리 흐름을 따르는지 이해할 수 있습니다. 기본적인 스프링의 예외 처리 흐름을 수정하려면 ErrorController
를 구현하거나 @ControllerAdvice
를 사용하는 등의 방법으로 직접 에러 핸들링을 커스터마이징할 수 있습니다.
더 궁금한 점이 있으시면 언제든지 질문해 주세요!