반응형
HandlerExceptionResolver 활용하기
예외 발생 → WAS → 오류 페이지 찾는다 → 다시 /error 호출 이 과정은 복잡하다. ExceptionResolver를 통해 예외가 발생했을 때 깔끔하게 해결이 가능하다.
if (id.equals("user-ex")) {
throw new UserException("사용자 오류");
}
ApiExceptionController에 user-ex에 대한 코드를 넣어주어 호출 시 UserException이 발생하도록 했다.
try {
if (ex instanceof UserException) {
log.info("UserException resolver to 400");
String acceptHeader = request.getHeader("accept");
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
if ("application/json".equals(acceptHeader)) {
Map<String, Object> errorResult = new HashMap<>();
errorResult.put("ex", ex.getClass());
errorResult.put("message", ex.getMessage());
// json을 문자로 바꿔준다.
String result = objectMapper.writeValueAsString(errorResult);
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.getWriter().write(result);
return new ModelAndView();
} else {
//TEXT/HTML
return new ModelAndView("error/500");
}
}
} catch (IOException e) {
log.error("resolver ex", e);
}
return null;
}
HTTP 요청 헤더의 ACCEPT 값이 application/json 이면 json 오류로 나타내고 그 외는 html 오류페이지를 보여준다. 중간에 objectMapper로 json을 문자로 바꾸게 해줬다.
이렇게 하면 ExceptionResolver를 통해 컨트롤러에서 발생하는 예외를 처리해버려 서블릿 컨테이너까지 예외가 전달되지 않아 WAS 입장에서는 편해졌다.
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.
반응형
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : ExceptionResolver사용하기(2) (0) | 2022.03.07 |
---|---|
[Spring Boot] : ExceptionResolver 사용하기(1) (0) | 2022.03.06 |
[Spring Boot] : HandlerExceptionResolver 시작하기 (0) | 2022.03.04 |
[Spring Boot] : API 예외 처리 스프링 부트 기본 오류 처리 (0) | 2022.03.03 |
[Spring Boot] : API 예외 처리 기본 체크하기 (0) | 2022.03.02 |
댓글