exception resolver 만들기
- Spring 3.2 미만을 사용할 경우
Spring에서 제공하는 ExceptionResolver 사용 시 몇몇 Spring에서 제공하는 ExceptionResolver 사용 시 Request에 대한 정보나 어떤 컨트롤러를 호출하여 Exception이 발생하였는지 정보를 알기 어려워 다음과 같이 ExceptionResolver를 상속하여 사용하였다.
Request에 대한 정보나 어떤 컨트롤러를 호출하여 Exception이 발생하였는지 정보를 알기 어려워 다음과 같이 ExceptionResolver를 상속하여 사용하였다.
Spring에서 제공하는 ExceptionResolver 사용 시 몇몇 Spring에서 제공하는 ExceptionResolver 사용 시 Request에 대한 정보나 어떤 컨트롤러를 호출하여 Exception이 발생하였는지 정보를 알기 어려워 다음과 같이 ExceptionResolver를 상속하여 사용하였다.
Request에 대한 정보나 어떤 컨트롤러를 호출하여 Exception이 발생하였는지 정보를 알기 어려워 다음과 같이 ExceptionResolver를 상속하여 사용하였다.
단점이라면 HttpServletRequest와 Response를 사용한다는 점? 필요이상의 정보를 받는다는점? =_=;;
public class SuperVisionExceptionResolver extends
AbstractHandlerExceptionResolver {
@Override
protected ModelAndView doResolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
// TODO Auto-generated method stub
if (handler == null) {
return _resolveException("뷰이름" , ex);
}
HandlerMethod handlerMethod = (HandlerMethod)handler;
String methodName = handlerMethod.getMethod().getName();
if (handlerMethod.getBean().getClass().equals(컨트롤러클래스. class)) {
if (methodName.equals("메소드명" )) {
return _resolveException("뷰이름" , ex);
} else if (methodName.equals( "메소드명")) {
return _resolveException("뷰이름" , ex);
}
}
return null ;
}
private ModelAndView _resolveException(String viewName, Exception e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName(viewName);
if (viewName.equals("jsonView" )) {
modelAndView.addObject( "errorCode" , 1);
modelAndView.addObject( "errorMessage" , String.format( "Exception : %s( %s )", e.getClass().getName(), e.getMessage()));
return modelAndView;
} else {
modelAndView.addObject( "error" , e.getMessage());
return modelAndView;
}
}
}
|
Spring Mvc에 등록
< beans:bean class ="com.konantech.agent.controller.SuperVisionExceptionResolver" >
< beans:property name= "order" value = "-1"/>
</ beans:bean>
|
- Spring 3.2 이상을 사용할 경우
@ControllerAdvice
public class GrobalControllerExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public Json<Object> handleException(Exception e, WebRequest req) {
Json<Object> json = new Json<Object>();
json.setErrorCode(1);
json.setErrorMessage(e.getMessage());
return json;
}
}
=_=;; 엄청 간단하다. 나중에 Exception class 별로 쪼개는 작업을 해야 겠지만
----------
Http Status Error 처리
web.xml
Controller
----------
Http Status Error 처리
web.xml
<error-page><error-code>400</error-code><location>/errorStatus</location></error-page><error-page><error-code>403</error-code><location>/errorStatus</location></error-page><error-page><error-code>404</error-code><location>/errorStatus</location></error-page><error-page><error-code>500</error-code><location>/errorStatus</location></error-page><error-page><error-code>503</error-code><location>/errorStatus</location></error-page>
Controller
@Controller
public class ErrorController {
@RequestMapping(value="/errorStatus")
@ResponseBody
public Json<Object> errorStatus(HttpServletResponse res) {
Json<Object> json = new Json<Object>();
json.setErrorCode(Json.ERROR_CODE_HTTP_STATUS);
json.setErrorMessage(res.getStatus() + " " + HttpStatus.valueOf(res.getStatus()).getReasonPhrase());
return json;
}
}
댓글
댓글 쓰기