JAVA/Spring 일반
Spring에서 ModelAndViewDefiningException 및 상황에 따른 view 또는 json 응답
달사자!
2022. 5. 3. 23:15
Spring에서 예외 핸들링 중 특정 예외에서 어떤 경우에는 json으로 응답하고 어떤 경우에는 유저에게 에러 페이지를 보여줘야하는 경우가 존재합니다.
이런 경우 간단히 처리하는 예제 소스입니다.(더 좋은 방법이 있을 수 있지만 고민이 필요)
/**
* 최상위 예외(Exception) 처리
* - 에러로그를 남겨서 담당자에게 이메일 발송(logback에 설정 됨)하여 알 수 있도록 하기 위함
* - 유저에게 에러 페이지를 보여주기 위해서 ModelAndViewDefiningException를 사용(DispatcherServlet에서 view 처리됨)
*
* @param ex
* @return
*/
@ExceptionHandler(Exception.class)
public ResponseEntity<Object> RootException(Exception ex) throws ModelAndViewDefiningException {
errorLog("RootException", ex);
log.debug("exception class ===> {}", ex.getClass().getSimpleName());
if (CommonUtil.isAjaxReq(HttpRequestUtil.getCurrentRequest())) { //ajax라면 json으로 응답
RtnVO rtnVO = new RtnVO();
rtnVO.setErrorCd(ErrorCd.SYSTEM_ERROR.name());
rtnVO.setMsg("서버 에러가 발생했습니다. 담당자에게 문의하세요");
return new ResponseEntity<>(rtnVO, ErrorCd.SYSTEM_ERROR.getStatus());
}
ModelAndView mav = new ModelAndView();
mav.setViewName("forward:/error/serverError"); //ajax 요청이 아니라면 유저에게 에러메시지 페이지를 보여줌(/error/serverError는 에러 페이지 랜더링용 공용 URL)
throw new ModelAndViewDefiningException(mav);
}
참고로 DispatcherServlet.java에서 ModelAndViewDefiningException 처리가 되어있다.