SpringMVC全局异常(重点)

如果不使用全局异常,如出现异常,会将我们的包名、表名等一些信息展示在我们的网站上,如下:

故我们需要写全局异常处理类进行包装全局异常,返回到我们的网站页面上去

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;
    }

}

备注:

在spring项目里面,@Component表示将该bean(也就是类)注入到spring容器中,在controller层用@Controller,在service层用@Service,在Dao层用@Repository

发布了241 篇原创文章 · 获赞 145 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/Richard_666/article/details/103539622
今日推荐