如果不使用全局异常,如出现异常,会将我们的包名、表名等一些信息展示在我们的网站上,如下:
故我们需要写全局异常处理类进行包装全局异常,返回到我们的网站页面上去
1、没有springmvc全局异常时的流程图
2、springmvc全局异常流程图
解决方法:
在公共包里面书写一个ExceptionResolver类实现HandlerExceptionResolver类:
package com.mmall.common;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJacksonJsonView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j
@Component //表示将该bean注入到spring容器中
public class ExceptionResolver implements HandlerExceptionResolver{
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
log.error("{} Exception",httpServletRequest.getRequestURI(),e);
ModelAndView modelAndView = new ModelAndView(new MappingJacksonJsonView());
//当使用是jackson2.x的时候使用MappingJackson2JsonView,课程中使用的是1.9。
modelAndView.addObject("status",ResponseCode.ERROR.getCode());
modelAndView.addObject("msg","接口异常,详情请查看服务端日志的异常信息");
modelAndView.addObject("data",e.toString());
return modelAndView;
}
}
备注:
扫描二维码关注公众号,回复:
8892463 查看本文章
在spring项目里面,@Component表示将该bean(也就是类)注入到spring容器中,在controller层用@Controller,在service层用@Service,在Dao层用@Repository