본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : HandlerExceptionResolver 시작하기

by 오주현 2022. 3. 4.
반응형

HandlerExceptionResolver 시작하기


IllegalArgumentException을 처리하지 못 해 컨트롤러 밖으로 넘어가는 일이 생길 때 HTTP 상태 코드를 400으로 처리하고 싶다고 가정하고 실습을 진행했다.

 

if (id.equals("bad")) {
 throw new IllegalArgumentException("잘못된 입력 값");
 }

먼저 ApiExceptionController를 수정해 주었다.

HandlerExceptionResolver를 사용하면 컨트롤러 밖으로 던져진 예외를 해결하고 동작 방식을 변경할 수 있따. 줄여서 ExceptionResolver라고 부른다.

 

@Slf4j
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

        // Exception 경우 ={}를 안 적어줘도 된다.
        log.info("call resolver", 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", 0);
        }

        return null;

    }
}

MyHandlerExceptionResolver도 코딩해 주었다.

 

ExceptionResolver가 ModelAndView를 반환하는 이유는 Exception을 Resolver(해결)하기 위함이다.

 

ExceptionResolver은 예외 상태 코드를 변환하거나 뷰 템플릿을 처리하거나 API응답을 처리할 때 사용한다.


스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.

반응형

댓글