美文网首页java
SpringMVC 全局异常处理

SpringMVC 全局异常处理

作者: 二妹是只猫 | 来源:发表于2019-03-11 16:44 被阅读0次
    创建ExceptionResolver实现HandlerExceptionResolver接口:
    @Slf4j
    @Component
    public class ExceptionResolver implements HandlerExceptionResolver {
        @Override
        public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
            log.error("{} Exception",request.getRequestURI(),ex);
            ModelAndView modelAndView = new ModelAndView(new MappingJacksonJsonView());
    
            //使用MappingJackson2JsonView需要Jackson 2.x,这里引入的jackson是1.9版本,
            modelAndView.addObject("status",ResponseCode.ERROR.getCode());
            modelAndView.addObject("msg","接口异常,详情查看服务端日志");
            modelAndView.addObject("data", ex.toString());
            return modelAndView;
        }
    }
    
    • 添加@Component注解,将该类添加到spring容器中,用于被扫描到。这里提一下@Service、@Component、@Repository这些注解实际并没有多大不同只是使用场景的区别:Repository一般用于dao层,Service用在service层,非这俩层的一般用Component
    • 这里不在返回视图信息而是通过MappingJacksonJsonView返回json信息,满足实际工作需要
    • 使用MappingJackson2JsonView需要Jackson 2.x,这里引入的jackson是1.9版本就使用的MappingJacksonJsonView
    • 通过modelAndView.addObject()返回打印信息,这里直接填入于前端约定好的格式就ok了。
    在dispatcher-server中添加扫描:
    <context:component-scan base-package="com.mmall.controller" annotation-config="true" use-default-filters="false">
            <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    

    直接扫描到controller下的controller注解。

    创建接口用于异常测试:
        @RequestMapping(value = "test_error.do",method =  RequestMethod.GET)
        @ResponseBody
        public void testError(){
            int a = 0;
            int b = 500/a;
        }
    

    接口请求返回到异常信息:

    error

    相关文章

      网友评论

        本文标题:SpringMVC 全局异常处理

        本文链接:https://www.haomeiwen.com/subject/sidbpqtx.html