全局异常处理
在项目中运用全局异常处理前,请先阅读本篇博客,这将会帮助你快速理解: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.测试