分享

@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获

 dabinglibrary 2019-08-20
@ControllerAdvice
public class DefaultExceptionHandler {

@ExceptionHandler({UnauthorizedException.class})
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public ModelAndView processUnauthenticatedException(NativeWebRequest request, UnauthorizedException e) {
ModelAndView mv = new ModelAndView();
mv.addObject("exception", e);
mv.setViewName("/Error/Unauthorized");
return mv;
}


@ExceptionHandler({RuntimeException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ModelAndView processRuntimeException(NativeWebRequest request, RuntimeException e) {
ModelAndView mv = new ModelAndView();
mv.addObject("exception", e);
mv.setViewName("/Error/Error");
return mv;
}

@ExceptionHandler({MessageException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ModelAndView processMessageException(NativeWebRequest request, MessageException e) {
ModelAndView mv = new ModelAndView();
mv.addObject("exception", e);
mv.setViewName("/Error/NotFound");
return mv;
}

@ExceptionHandler({DuplicateKeyException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ModelAndView processDuplicateKeyException(NativeWebRequest request, DuplicateKeyException e) {
ModelAndView mv = new ModelAndView();
mv.addObject("exception", e);
mv.setViewName("/Error/500");
return mv;
}

@ExceptionHandler({Exception.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ModelAndView processException(NativeWebRequest request, Exception e) {
ModelAndView mv = new ModelAndView();
mv.addObject("exception", e);
mv.setViewName("/Error/404");
return mv;
}

}

捕获异常也可以返回json:

@ExceptionHandler
@ResponseBody
public APIManageBaseResp exceptionHandler(Exception e) {
logger.error("调用接口出现异常:{}",e);
APIManageBaseResp<String> resp = new APIManageBaseResp();
resp.setResultCode(HttpStatus.SC_INTERNAL_SERVER_ERROR);
if(e instanceof MessageException){
resp.setErrorMsg(e.getMessage());
}else{
resp.setErrorMsg("调用接口出现异常:"+e.getMessage());
}
resp.setDataFiled("");
return resp;
}


@RequestMapping(value = "/testFacade")
@ResponseBody
public String testFacade() {
int a = 1/0;

return "ok";
}


@RequestMapping(value = "/testFacade1")
@ResponseBody
public String testFacade1() throws MessageException {
throw new MessageException("错了en ");

}


@RequestMapping(value = "/testFacade2")
@ResponseBody
public String testFacade2() {
throw new UnauthorizedException("错了b ");

}


@RequestMapping(value = "/testFacade3")
@ResponseBody
public String testFacade3() {
throw new RuntimeException("错了a ");

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多