异常处理器

实现HandlerExceptionResolver接口(异常处理器)


@Component // 配上注解Spring看到实现了这个接口就知道是异常处理器了
public class ExceptionResolver implements HandlerExceptionResolver {public ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex) {System.out.println("异常处理器正在执行中");ModelAndView modelAndView = new ModelAndView();//定义异常现象出现后,反馈给用户查看的信息modelAndView.addObject("msg","出错啦! ");//定义异常现象出现后,反馈给用户查看的页面modelAndView.setViewName("error.jsp");return modelAndView;}
}

根据异常的种类不同,进行分门别类的管理,返回不同的信息

public class ExceptionResolver implements HandlerExceptionResolver {@Overridepublic ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex) {System.out.println("my exception is running ...."+ex);ModelAndView modelAndView = new ModelAndView();if( ex instanceof NullPointerException){modelAndView.addObject("msg","空指针异常");}else if ( ex instanceof  ArithmeticException){modelAndView.addObject("msg","算数运算异常");}else{modelAndView.addObject("msg","未知的异常");}modelAndView.setViewName("error.jsp");return modelAndView;}
}

注解开发异常处理器:

使用注解实现异常分类管理

  • 名称: @ControllerAdvice
  • 类型: 类注解
  • 位置:异常处理器类上方
  • 作用:设置当前类为异常处理器类
@Component
@ControllerAdvice
public class ExceptionAdvice {}

使用注解实现异常分类管理

  • 名称: @ExceptionHandler
  • 类型: 方法注解
  • 位置:异常处理器类中针对指定异常进行处理的方法上方
  • 说明:处理器方法可以设定多个
@Component // 异常类只能有一个,多个的情况会都执行,会报错
@ControllerAdvice
public class ExceptionAdvice {// 可以根据不同的异常  写多个异常方法@ExceptionHandler(NullPointerException.class)// 调用异常名@ResponseBody // 只让结果返回的是字符串类型的,否则会直接去匹配页面public String doOtherException(Exception ex){ // 写上参数可以拿到具体的参数return "出错啦,请联系管理员! ";}
}

异常分类:

工作中肯定是不能直接去定义一个异常类,然后挨个匹配异常,可能不同的异常给用户展示 写到死。

业务异常:

  • 发送对应消息传递给用户,提醒规范操作

系统异常:

  • 发送固定消息传递给用户,安抚用户
  • 发送特定消息给运维人员,提醒维护
  • 记录日志

其他异常:

  • 发送固定消息传递给用户,安抚用户
  • 发送特定消息给编程人员,提醒维护
  • 纳入预期范围内
  • 记录日志

自定义异常

用户行为异常类

//自定义异常继承RuntimeException,覆盖父类所有的构造方法
public class BusinessException extends RuntimeException {public BusinessException() {}public BusinessException(String message) {super(message);}public BusinessException(String message, Throwable cause) {super(message, cause);}public BusinessException(Throwable cause) {super(cause);}public BusinessException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);}
}

系统异常:

//自定义异常继承RuntimeException,覆盖父类所有的构造方法
public class SystemException extends RuntimeException {public SystemException() {}public SystemException(String message) {super(message);}public SystemException(String message, Throwable cause) {super(message, cause);}public SystemException(Throwable cause) {super(cause);}public SystemException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);}
}

自定义异常触发类

@Controller
public class UserController {@RequestMapping("/save")@ResponseBodypublic List<User> save(@RequestBody User user) {System.out.println("user controller save is running ...");//模拟业务层发起调用产生了异常
//        int i = 1/0;
//        String str = null;
//        str.length();//对用户的非法操作进行判定,并包装成异常对象进行处理,便于统一管理if(user.getName().trim().length() < 8){throw new BusinessException("对不起,用户名长度不满足要求,请重新输入!");}if(user.getAge() < 0){throw new BusinessException("对不起,年龄必须是0到100之间的数字!");}if(user.getAge() > 100){throw  new SystemException("服务器连接失败,请尽快检查处理!");}User u1 = new User();u1.setName("Tom");u1.setAge(3);User u2 = new User();u2.setName("Jerry");u2.setAge(5);ArrayList<User> al = new ArrayList<User>();al.add(u1);al.add(u2);return al;}
}

Ajax处理

<%@page pageEncoding="UTF-8" language="java" contentType="text/html;UTF-8" %><a href="javascript:void(0);" id="testException">访问springmvc后台controller,传递Json格式POJO</a><br/><script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.3.1.min.js"></script><script type="text/javascript">$(function () {$("#testException").click(function(){$.ajax({contentType:"application/json",type:"POST",url:"save",/*通过修改参数,激活自定义异常的出现*/// name长度低于8位出现业务异常// age小于0出现业务异常// age大于100出现系统异常// age类型如果无法匹配将转入其他类别异常data:'{"name":"Jock","age":"111"}',dataType:"text",//回调函数success:function(data){alert(data);}});});});
</script>

通过自定义异常将所有的异常现象进行分类管理,以统一的格式对外呈现异常消息,部分异常是面向用户,部分是面向内部的,比如说服务器出现了故障,告诉用户出错了就行了,不需要显示具体的原因,然后发送异常给内部人员进行处理操作

SpringMVC异常处理 自定义异常相关推荐

  1. SpringMVC自定义拦截器与异常处理(自定义异常)

    SpringMVC自定义拦截器与异常处理 拦截器概念 拦截器代码演示 创建maven工程 pom.xml <?xml version="1.0" encoding=" ...

  2. SpringMVC异常处理机制详解[附带源码分析]

    SpringMVC异常处理机制详解[附带源码分析] 参考文章: (1)SpringMVC异常处理机制详解[附带源码分析] (2)https://www.cnblogs.com/fangjian0423 ...

  3. SpringMVC异常处理之异常处理代码编写

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  4. SpringMVC 异常处理(简单异常处理器 SimpleMappingExceptionResolver;自定义异常处理需要实现HandlerExceptionResolver接口)

    一.SpringMVC 框架异常处理流程 二.异常处理的两种方式 三.简单异常处理器 SimpleMappingExceptionResolver 1.自定义异常类 package com.lt.ex ...

  5. 25 类:接口 抽象父类 多态 鸭子类型 格式化方法与析构方法 反射 异常处理 自定义异常 断言...

    面向对象与面向过程分析 # 清晰知道操作的功能,但不明确操作的具体对象 print(len('123')) # 清晰知道操作的对象,但不明确具体的操作方法 print('123'.__len__()) ...

  6. SpringMVC异常处理机制-异常处理的思路

    异常处理的思路 系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试等手段减少运行时异常的发生. 系统的Dao.S ...

  7. 【Java从0到架构师】SpringMVC - 异常处理_拦截器

    异常处理_拦截器 异常处理 简单的异常与页面映射 - SimpleMappingExceptionResolver √自定义异常处理类 - 实现 HandlerExceptionResolver 接口 ...

  8. -1-6 java 异常简单介绍 java异常 异常体系 Throwable 分类 throws和throw 异常处理 自定义异常...

    异常 异常:异常就是Java程序在运行过程中出现的错误. 异常由来:问题也是现实生活中一个具体事务,也可以通过java 的类的形式进行描述,并封装成对象. 其实就是Java对不正常情况进行描述后的对象 ...

  9. SpringMVC框架|自定义异常处理器

    文章目录 一.自定义异常处理器介绍 二.测试自定义异常处理器 1.封装自定义异常信息 2.异常解析器 3.添加bean到SpringMVC配置中 4.最终跳转页面 5.测试页面 遇到自定义异常 遇到系 ...

最新文章

  1. spring解决ajax跨域问题
  2. #161: 给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。 你的任务就是检测矩阵是否符合条件...
  3. 联想笔记本电脑,重新安装系统之U盘启动方法
  4. sun building in shanghai
  5. 如何将SAP UI5应用配置到SAP云平台Fiori Launchpad里
  6. 如何将前端数据保存到文件
  7. 执行jar包,输出信息到文件
  8. 在Windows上安装MySQL5.7
  9. C#线程系列讲座(4):同步与死锁
  10. 非root用户安装protobuf的python依赖到指定目录
  11. 基于Layabox引擎的魔塔微信小游戏设计与实现
  12. 组队学习-数据采集-八爪鱼实操&使用感想
  13. 不良资产处置(二):不良资产处置存在问题及发展前景
  14. 如何 重构网络 SDN架构实现
  15. 服务器用户名 administrator 修改,windows2003中Administrator用户名与密码修改图解Windows服务器操作系统 -电脑资料...
  16. 鸿蒙调出安卓10彩蛋,暂时忘记鸿蒙!华为 EMUI 10.0 发布时间确认:这才是主角...
  17. [从头读历史] 第310节 星球战争 BC2399 至 BC2300(公元前24世纪)
  18. 什么是SAP Cloud Platform(SAP云平台) ?
  19. js mp4解码合并成ffmpeg
  20. 三十而立的用友,未来的路将向何方?

热门文章

  1. iview select 怎么清空_iView各种组件清空重置
  2. mybatis generator 打印出来表了 但是没有生成未见_Python丨深度学习中使用生成器加速数据读取与训练...
  3. 按照顺序执行_问一个多线程的问题:如何才能保证线程有序执行?
  4. html中websocket获取数据,如何使用websocket从数据库中获取数据来刷新视图
  5. java 检索编号输出信息_java,_java 如何解析txt文档,输入检索信息,然后输出,java - phpStudy...
  6. 奇异值分解SVD(证明全部省略)
  7. java json u0026_特殊字符的json序列化
  8. 【课题总结】OpenCV 抠图项目实战(7)边缘检测
  9. 用python祝福父亲节_父亲节给爸爸的祝福语微信48条
  10. 安装rtx时报错因计算机中丢失lo,policy.3.1.IntervalZero.RTX64.dll