묻고 답해요
140만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HttpServletResponse의 sendError, setStatus 차이
[질문 템플릿]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 에 데이터를 출력하는 일을 추가로 하는건가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ResponseStatus와 @ExceptionHandler 함께 사용한 부분 질문있습니다ㅠㅠ
12:00 ~ @ResponseStatus와 @ExceptionHandler 함께 사용한 부분 설명 관련 두가지 궁금한게 있습니다. 전 시간에 ResponseStatus를 사용하면 ResponseStatusExceptionResolver가 상태 코드를 변경해서 sendError를 발생시킨다고 이해했는데 그럼 sendError가 WAS로 해당 에러를 전달하려고할텐데 그 과정에서 중간에서 @ExceptionHandler가 그 예외를 잡아서 처리함으로써 WAS로 예외가 전달되지 못하고 상태 코드만 변경되고 응답은 처리한데로 정상흐름으로 된다는 건가요..? 그럼 서버 내부적으로 로그를 남긴다던가 하는 용으로 쓰이고 클라이언트에게는 정상적으로 응답하도록 하는 효과가 있는건지요...!