前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springMVC系列(三)——异常统一处理

springMVC系列(三)——异常统一处理

作者头像
逝兮诚
发布2019-10-30 13:13:55
3530
发布2019-10-30 13:13:55
举报
文章被收录于专栏:代码人生代码人生

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/luo4105/article/details/72326621

介绍

在开发中,常会出现各种各样的异常,我们不可能对每个异常都进行处理,那样工作量不仅大,而且不易改动,这就需要对异常进行统一处理,如给出错误提示、打印日志、跳转错误页面等。

SpringMVC处理异常的方式有

1.配置使用SpringMVC的简单异常映射解析器SimpleMappingExceptionResolver,它的作用是把异常解析映射成配置的页面

2.使用自定义的处理异常解析器,需要实现HandlerExceptionResolver。

3.使用@ExceptionHandler(异常处理器)注解实现异常处理

前两种对代码没有侵入型,第一种只是简单映射异常和页面,第二种可以对异常进行处理

实现

实现项目

Jar包

项目结构

自定义异常

ServiceException

代码语言:javascript
复制
public classServiceException extends RuntimeException {
    private static final long serialVersionUID= 1L;
    public ServiceException(Strings) {
       super(s);
    }
}

ControllerException

代码语言:javascript
复制
public classControllerException extends RuntimeException {
    private static final long serialVersionUID= 1L;
    publicControllerException(String s) {
       super(s);
    }
}

Controller

代码语言:javascript
复制
@Controller
@RequestMapping("")
public classTestController {
   
    @Autowired(required=false)
    private TestService testService;
 
    @RequestMapping("exp")
    public String exp(String id) throws Exception {
       testService.thorwServiceException(id);
       if("1".equals(id)) {
           throw new ControllerException("controller exception");
       }
       return "exp";
    }
}

Service

代码语言:javascript
复制
@Service
public classTestService {
    public voidthorwServiceException(String id) throwsException {
       if("2".equals(id)) {
           throw new ServiceException("service异常");
       }
    }
}

exp.jsp

代码语言:javascript
复制
<%@ page language="java"contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
    <p><a href="exp?id=1">controller抛异常</a></p>
    <p><a href="exp?id=2">service抛异常</a></p>
</body>
</html>
使用简单异常映射解析器SimpleMappingExceptionResolver

在SpringMVC配置文件中加上

代码语言:javascript
复制
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
   <!-- 定义默认的异常处理页面,当该异常类型的注册时使用   -->
   <property name="defaultErrorView" value="error"></property> 
   <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception  -->
   <property name="exceptionAttribute" value="ex"></property> 
   <!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常页名作为值,会跳转到对应的异常页面 --> 
   <property name="exceptionMappings"> 
        <props> 
            <prop key="com.lc.exception.ControllerException">error-contl</prop> 
            <prop key="com.lc.exception.ServiceException">error-service</prop> 
 
            <!-- 这里还可以继续扩展对不同异常类型的处理 --> 
        </props> 
   </property> 
</bean>

运行、效果

使用自定义异常处理解析器

新建EcpHandler类

代码语言:javascript
复制
public classEcpHandler implements HandlerExceptionResolver {
    @Override
    public ModelAndViewresolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
           Exceptionex) {
       Map<String,Object> model= newHashMap<String, Object>(); 
        model.put("ex", ex); 
       if(ControllerException.class.isInstance(ex)) {
           return new ModelAndView("error-contl",model);
       }elseif(ex instanceofServiceException) { 
            return new ModelAndView("error-service", model); 
        } else { 
            return null; 
        }
    }
}

在springMVC配置中注册

代码语言:javascript
复制
<bean id="excpHandler"class="com.lc.exception.EcpHandler"/> 

运行、效果

@ExceptionHandler这种方式不太常用,故不介绍

总结

使用简单异常映射解析器SimpleMappingExceptionResolver,优点集成是简单,方便、对代码没有入侵性,缺点是不能进行复杂的操作,如记录异常日志。

使用自定义异常处理解析器集成是简单,方便、对代码没有入侵性、也可以对异常进行自定义的处理操作。

参考资料

1.http://blog.csdn.net/ufo2910628/article/details/40399539

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 实现
    • 实现项目
      • 使用简单异常映射解析器SimpleMappingExceptionResolver
        • 使用自定义异常处理解析器
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档