网站首页 > 精选教程 正文
在开发的过程中,会遇到大量的各种各样的异常需要去处理,并且在前后端分离的开发中,还有存在如何与前端约定,要让前端分清楚什么样的异常应该展现什么的内容提示给用户,一般不建议直接把一些框架内部抛出的异常直接展现到前台页面上去,都是要进行统一格式的封装,以便前端进行统一的处理。
一般来SSM框架的异常在每一层都会有不同的异常,比如数据层会有和数据库交互出现的异常。业务层会有一些业务报错,控制层中也会出现一些请求路径错误这些异常。
捕获异常可以使用try,catch代码块来捕获异常,不过这样子会造成代码出现大量的重复代码。所以,若依框架里面使用了SpringMVC自带的全局异常处理器来处理各种异常。通过使用@RestControllerAdvice来对controller层里面的异常统一进行处理。使用的方法也是相对比较固定的。
下面的代码块是里面的一个例子。AccessDeniedException这个异常是springSecurity里面的异常,@ExceptionHandler()这个注解表明,一但捕获到括号里面的异常,将终止原来控制层方法的执行,并且转入当前的方法执行,当前方法里面会对异常做处理,获取一些信息,例如例子中的uri请求,然后通过封转好的ajax请求返回给前台进行处理。
/**
* 权限校验异常
*/
@ExceptionHandler(AccessDeniedException.class)
public AjaxResult handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request)
{
String requestURI = request.getRequestURI();
log.error("请求地址'{}',权限校验失败'{}'", requestURI, e.getMessage());
return AjaxResult.error(HttpStatus.FORBIDDEN, "没有权限,请联系管理员授权");
}
框架的作者在common这个工程中自定义了很多类型的异常。比如用户信息类的异常,业务异常,工具类异常等,我们后续二次开发的时候还可以根据自己的需求自行添加。
最后总结一下全局异常的使用大致流程,首先通过了SpringMVC中自带的全局异常处理器,捕获到控制层中的异常,然后进行后续的对异常的处理,并且把封装好的结果返回给前台。如果是在service层中的异常,则还需使用try catch捕获,然后返回给对应的控制层。
- 上一篇: Java异常处理机制深度解析与最佳实践
- 下一篇: 学习Java异常,吃透这篇足够
猜你喜欢
- 2025-03-08 利用 setjmp和 longjmp实现异常处理机制的 C 语言技巧
- 2025-03-08 JVM频繁Full GC问题的排查与解决方案
- 2025-03-08 前端异常捕获与处理汇总,收藏篇
- 2025-03-08 京东大佬问我,Spring Boot 如何保证接口安全?请写出你的架构设计
- 2025-03-08 SpringBoot:如何优雅地进行响应数据封装、异常处理
- 2025-03-08 gin全局统一异常处理
- 2025-03-08 Springboot异常处理的五种方式,你会几种
- 2025-03-08 Java关于Exception和Error以及处理机制解析
- 2025-03-08 Spring Boot如何优雅实现结果统一封装和异常统一处理
- 2025-03-08 Spring MVC 中,优雅处理异常的 6种方式!
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)