@ExceptionHandler를 사용하여, 해당 클래스 내에서 발생하는 Exception을 공통처리 할 수 있다. 현재는 RestExceptionHandler가 메서드로 구현되어 catch에서 호출되지만, 아래와 같이 변경이 가능하다.
@ExceptionHandler(ServletRequestBindingException.class)
@ResponseBody
private ResponseEntity<?> RestExceptionHandler(HttpServletRequest request, Exception e) {
logout(request, null);
HttpStatus httpStatus = HttpStatus.INTERNAL_SERVER_ERROR;
if( e instanceof DestinyException) {
httpStatus = HttpStatus.BAD_REQUEST;
}
e_Logger.error("getServerStatus Cause : " + e.getCause());
e_Logger.error("getServerStatus Message : " + e.getMessage());
RestResult<HashMap> responseResult = new RestResult();
responseResult.setSuccess(false);
responseResult.setErrorCode("CUSTOM");
responseResult.setErrorMessage(e.getMessage());
responseResult.setData(new HashMap());
return new ResponseEntity<Object>(responseResult, httpStatus);
}
/* ------------------------------------------------------------------------ */
<bean id="exceptionHandlerExceptionResolver" class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver" autowire="byName" customaction="$[add]"/>
@ExceptionHandler(ServletRequestBindingException.class) 에서 지정한, “ServletRequestBindingException” 이 발생시에 해당 메서드가 잘 호출되지만, 솔루션 코어내에 등록된 예외 이벤트 관련 부분에서 결국 Exception Page를 보내게 되어, ResponseEntity를 응답 해주지 않는다.