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

호춘님의 프로필 이미지

작성한 질문수

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

@ExceptionHandler

HttpServletResponse의 sendError, setStatus 차이

22.12.26 18:13 작성

·

1.5K

0

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

[질문 내용]
아래 코드는 강의를 들으며 작성한MyHandlerExceptionResolver 입니다.

@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());
                //response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
                return new ModelAndView();
            }
        } catch (IOException e) {
            log.error("resolver ex", e);
        }
        return null;
    }
}


컨트롤러에서 IlleagalArgumentException 이 발생했을 때, MyHandlerExceptionResolver가 실행이됩니다. 지금까지 response.sendError()가 단순히 상태코드를 변경하는 메서드인줄 알았고, 실행 결과 아래 화면을 기대했습니다.

하지만, 아래와 같이 json 형태의 데이터를 응답결과로 돌아았는데요.

단순히 상태코드를 변경하는 'response.setStatus()와는 다른 뭔가가 있구나' 라는 생각을 하게 됐습니다. response.sendError() 는 response body 에 데이터를 출력하는 일을 추가로 하는건가요?

 

 

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

2023. 01. 01. 23:13

안녕하세요. 호춘님

sendError는 서블릿 컨테이너에 실제 오류가 발생했다고 알려주는 역할을 수행합니다.

감사합니다.

호춘님의 프로필 이미지

작성한 질문수

질문하기