全局异常处理

在项目中运用全局异常处理前,请先阅读本篇博客,这将会帮助你快速理解:https://blog.csdn.net/u010286027/article/details/84864393

1.为什么使用全局异常处理
如果不使用全局异常包装处理异常信息,那么会将项目的一些信息暴露出去,这是很危险的,如下面案例所示:

@RequestMapping(value = "/login",method = RequestMethod.POST)
@ResponseBody
public ServerResponse<User> login(@RequestBody User user, HttpSession session){
    int i=0;
    int j = 666/i;
    ServerResponse<User> serverResponse = userService.login(user.getUsername(),user.getPassword());
    if(serverResponse.isSuccess()){
        session.setAttribute(Const.CURRENT_USER,serverResponse.getData());
    }
    return serverResponse;
}

全局异常处理
2.全局异常处理器代码

@Slf4j
@Component
public class ExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        log.error("{} exception",httpServletRequest.getRequestURI(),e);
        //将ModelAndView转换为json格式
        ModelAndView modelAndView = new ModelAndView(new MappingJackson2JsonView());
        modelAndView.addObject("status",ResponseCode.ERROR.getCode());
        modelAndView.addObject("msg","接口异常,详情请查看服务端日志异常信息!");
        modelAndView.addObject("data",e.toString());
        return modelAndView;
    }
}

3.测试
全局异常处理
全局异常处理