![56b918bf5510e4db3190bd3ec97af444.png](https://i-blog.csdnimg.cn/blog_migrate/ff4d177fea4b25a75896d7f4d49421f7.jpeg)
二 定义全局异常
1 需求分析
定义全局异常说明明确,能够快速定位问题,统一代码业务性问题处理规范,方便错误数据的封装,后台数据机构的统一(统一异常拦截体现);
2 编写GlobalExceptionResolver
@Component
public class GlobalExceptionResolver implements HandlerExceptionResolver {
/**
* 全局异常
* @param httpServletRequest
* @param httpServletResponse
* @param handler
* @param ex
* @return
*/
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler, Exception ex) {
ModelAndView modelAndView = createDefaultModelAndView(httpServletRequest);
/**
* view异常
* json异常
*/
if(handler instanceof HandlerMethod){
if(ex instanceof ParamsException){
ParamsException exception=(ParamsException)ex;
/**q
* 处理用户未登录
*/
if(exception.getCode().equals(CrmConstant.OPS_FAILED_DODE) ){
modelAndView.addObject("msg","用户未登录");
modelAndView.addObject("code",CrmConstant.LOGIN_FAILED_DODE);
return modelAndView;
}
}
HandlerMethod handlerMethod=(HandlerMethod)handler;
Method method = handlerMethod.getMethod();
ResponseBody responseBody = method.getAnnotation(ResponseBody.class);
if(responseBody!=null){
MessageModel messageModel = new MessageModel();
messageModel.setMsg(CrmConstant.OPS_FAILED_MSG);
messageModel.setCode(CrmConstant.LOGIN_FAILED_DODE);
if(ex instanceof ParamsException){
ParamsException exception = (ParamsException)ex;
messageModel.setMsg(exception.getMsg());
messageModel.setCode(exception.getCode());
}
httpServletResponse.setContentType("application/json;charset=uft-8");
httpServletResponse.setCharacterEncoding("utf-8");
PrintWriter printWriter = null;
try {
printWriter = httpServletResponse.getWriter();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(printWriter!=null){
printWriter.write(JSON.toJSONString(messageModel));
printWriter.flush();
printWriter.close();
}
}
return null;
}else {
if(ex instanceof ParamsException) {
ParamsException exception=(ParamsException)ex;
modelAndView.addObject("msg", exception.getMsg());
modelAndView.addObject("code", exception.getCode());
return modelAndView;
}
}
}
return modelAndView;
}
private ModelAndView createDefaultModelAndView(HttpServletRequest httpServletRequest){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error");
modelAndView.addObject("code",CrmConstant.OPS_FAILED_DODE);
modelAndView.addObject("msg", CrmConstant.OPS_FAILED_MSG);
modelAndView.addObject("uri",httpServletRequest.getRequestURI());
modelAndView.addObject("ctx",httpServletRequest.getContextPath());
return modelAndView;
}
}
3 前台error
<#include "common.ftl" >
<script>
$(function () {
alert("${msg}")
if("${uri}"=="/main"){
window.location.href=ctx + "/index";
}else{
window.parent.location.href = ctx + "/index";
}
})
</script>