2019独角兽企业重金招聘Python工程师标准>>>

在SpringMVC框架的项目开发过程中,你还在使用 try{} catch(){} 输出异常吗?,那样你就真的OUT了,SpringMVC为我们提供了强大的异常捕捉类,我们只需要稍稍处理即可;

1, 编写全局处理类:

package com.xt.shop.base.exception;import java.io.IOException;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver;/***@description TODO SpringMVC异常捕捉类*@date  2018年1月4日*@author  geYang**/
public class MyExceptionResolver extends AbstractHandlerExceptionResolver {@Overrideprotected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler,Exception e) {// TODO SpringMVC 全局异常捕捉String msg = null;if(e instanceof MyException){msg = e.getMessage();} else if(e instanceof Exception){msg = "网络异常或系统错误,请重新请求";}try {response.getOutputStream().write(msg.getBytes("UTF-8"));} catch (IOException ex) {ex.printStackTrace();}return null;}}

2, 将该类配置到 spring-mvc.xml 配置文件中:

<!-- 异常处理校验配置: --><bean class="com.xt.shop.base.exception.MyExceptionResolver"><property name="order" value="0" /></bean>

没错,就是这么简单;

方法二:  使用继承异常处理来全局处理:

package com.chdj.exception;import javax.servlet.http.HttpServletRequest;import org.apache.commons.logging.LogFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;import com.chdj.util.MyResult;/**  * Describe:异常集中处理类,通过Controller继承该类实现* Date:2018/01/05*/
public abstract class ExceptionController { @ResponseBody@ExceptionHandler  public Object exp(HttpServletRequest request, Exception e) {e.printStackTrace();LogFactory.getLog(super.getClass()).error(e.getMessage(), e);return MyResult.getFalse(e.getMessage()); }
}/*** @ExceptionHandler 异常处理的注解*/

其他Controller通过继承该类,也能达到全局异常处理的实现;

方法三: 同 spring boot 配置

1, 使用 @RestControllerAdvice 或 @ControllerAdvice 注解

package com.gy.spring.mvc.common.interceptor;import com.gy.spring.mvc.common.tools.R;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.NoHandlerFoundException;import java.io.IOException;@RestControllerAdvice
public class ExceptionCapture {private Log logger = LogFactory.getLog(getClass());@ExceptionHandler(IOException.class)public R handlerIOException(Exception e) {logger.error(e.getMessage(), e);return R.err("流文件异常");}@ExceptionHandler(NoHandlerFoundException.class)public R handlerNoFoundException(Exception e) {logger.error(e.getMessage(), e);return R.err(404, "请求地址不存在");}@ExceptionHandler(Exception.class)public R handlerException(Exception e) {System.err.println("未知异常");logger.error(e.getMessage(), e);return R.err("未知异常");}}

2, 注意该类是否已被扫描到spring容器中,若未扫描该类,声明到容器中:

<bean class="com.gy.spring.mvc.common.interceptor.ExceptionCapture"/>

三种全局异常处理方法,一种通过继承SpringMVC的异常处理来实现,一种通过异常注解来实现,两种方式各有利弊. 我们可以根据项目灵活运用. 个人觉得使用 方法三 比较方便.

转载于:https://my.oschina.net/u/3681868/blog/1603515

SpringMVC 全局异常处理的简单应用相关推荐

  1. springmvc全局异常处理ControllerAdvice区分返回响应类型是页面还是JSON

    springmvc全局异常处理ControllerAdvice区分返回响应类型是页面还是JSON 参考文章: (1)springmvc全局异常处理ControllerAdvice区分返回响应类型是页面 ...

  2. SpringMVC 全局异常处理,返回json

    2019独角兽企业重金招聘Python工程师标准>>> 1.在spring-mvc.xml中增加配置: 比如我的freemarker视图定义的是:/WEB-INF/template ...

  3. springMVC 全局异常处理

    spring3.0注解很方便强大,所以更多的开发者都倾向于用注解来代替原来繁琐的配置,而对于异常也有相应的注解,我个人并不觉得在配置文件中配置全局异常很麻烦,如果整个项目都用了注解,而你再用配置就显得 ...

  4. springboot基于全局异常处理的简单日志打印

    log.error() Logger类下有多个不同的error方法,根据传入参数的个数及类型的不同,自动选择不同的重载方法. 当error(Object obj)只传入一个参数时会将异常对象作为Obj ...

  5. springmvc全局异常处理

    1.自定义异常类与自定义异常处理器 1).自定义异常类 /** *自定义异常类继承Exception */ public class SysException extends Exception {p ...

  6. springmvc高级(拦截器,全局异常处理,文件上传)

    SpringMVC 1.文件上传 文件上传: 指的就是将用户本地计算机中文件上传到服务器上的过程称之为文件上传 1).文件上传编程步骤 # 1.项目中引入相关依赖 <dependency> ...

  7. bean加载时调用@value时会出现空指针异常_SpringMVC全局异常处理机制

    SpringMVC全局异常处理 SpringMVC除了可以做URL映射和请求拦截外,还可以做全局异常的处理.全局异常处理可能我们平时比较少机会接触,但是每个项目都肯定会做这个处理.比如在上一间公司,是 ...

  8. JSON和几个的全局异常处理

    目录 一.SpringMVC对JSON的支持 1.json的各种场景 二.SpringMVC的全局异常处理的3种形式 1.非全局异常处理问题演示 ① 为什么要全局异常处理 ② 异常处理思路 ③ Spr ...

  9. java与java ee_Java EE 8 MVC:全局异常处理

    java与java ee 在之前的先前文章中,我们了解了在Java EE MVC中访问请求信息(例如查询或路径参数 )的各种方法. 这篇文章显示了如何将全局异常处理应用于MVC应用程序. 假设我们有一 ...

最新文章

  1. vi/vim 删除:一行, 一个字符, 单词, 每行第一个字符 命令
  2. java_环境安装(window10)
  3. django 快速实现注册
  4. php如何获取上传文件的后缀?
  5. CSS(1)——如何使用css选择器
  6. web项目怎么打包上线_高级前端web工程师简历范文,【工作经历+项目经验+自我评价】怎么写...
  7. 【线上分享】云游戏面对低延迟挑战的实践
  8. android 调用默认铃声后怎么改起始的默认选择位置?
  9. python 相对导入_python 相对导入与绝对导入
  10. 总谐波失真计算公式_新能源汽车技术|车用轮毂电机转矩谐波协同控制策略
  11. html自动播放auto,为移动而生的 HTML 属性autocapitalize和autocorrect
  12. java正则获取数字_Java通过正则表达式获取字符串中数字的方法示例
  13. LVS NAT模式跨子网部署方法
  14. html点击按钮 重新加载页面或者跳转页面实现
  15. 《缠中说禅108课》96:无处不在的赌徒心理
  16. Axure 8 设置当前动态时间
  17. hive与es交互bug
  18. 数据库实验一:数据库与数据表定义(1)—— 数据库相关操作
  19. 伯克利摘得最佳论文,陈丹琦、杨笛一等华人团队获杰出论文,ACL2022奖项公布...
  20. Mac桌面壁纸文件如何提取里面的壁纸图片?heic动态桌面壁纸怎么导出jpg的图片形式?

热门文章

  1. netty 水位线与oom
  2. elasticsearch集群选举源码解析
  3. 第二章--电商设计表订单实体-电商项目
  4. yum install -y iptraf 显示找不到命令
  5. kafka专题:kafka的Topic主题、Partition分区、消费组偏移量offset等基本概念详解
  6. CSDN怎么换行?添加空行
  7. json转string工具_不要再重复造轮子了,这款开源工具类库贼好使!
  8. 记录一次分组求和查询优化
  9. linux下tcpdump的使用简介
  10. RocketMQ常见面试题