Spring异常实现统一处理的方法

 更新时间:2022年12月08日 14:35:17   作者:居然天上楼  
这篇文章主要介绍了Spring异常实现统一处理的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

1.统一处理异常的机制

Spring MVC框架提供了统一处理异常的机制!表现为每种类型的异常只需要写一段(写一次)处理此异常的代码即可,项目中无论处理哪种请求时,只要出现这种异常,都会自动执行这段代码!

提示:当项目中添加了spring-boot-starter-web依赖项,此依赖项中的核心就是Spring MVC框架的依赖项。

在实现统一处理异常之前,需要先使得控制器中处理请求的方法不再处理异常!则处理请求的方法表现为抛出异常(但并不需要从代码中显式的表现出来)!

2.关于统一处理异常的方法

访问权限:应该使用public

返回值类型:参考处理请求的方法方法

名称:自定义

参数列表:至少有1个异常类型的参数,表示被处理的异常,另外,可以按需添加;HttpServletRequestHttpServletResponse等少量特定类型的参数,不可以随意添加其它;参数,例如不可以添加HttpSession等,如果有多个参数,各参数可以不区分先后顺序;

注解:必须添加@ExceptionHandler,表示此方法是处理异常的方法。

@ExceptionHandler
public String handleServiceException(ServiceException e) {
    return e.getMessage();
}

3.关于处理异常的方法的执行特点

允许同时存在多个处理异常的方法,只要这些方法处理的异常不完全相同即可;

多个处理异常的方法,其处理的异常类型允许存在继承关系;

  • 例如某方法处理NullPointerException,另一个方法处理RuntimeException,是正确的;
  • 当出现子级异常时,将执行处理子级异常的方法;

如果将处理异常的方法定义在控制器类中,则这些方法只能作用于当前控制器类中处理的请求;

可以自定义类,在类上添加@RestControllerAdvice注解,将处理异常的方法声明在这个类中,可以作用于当前项目中所有处理请求时方法。

则在项目的根包下创建ex.handler.GlobalExceptionHandler类,在类上添中@RestControllerAdvice注解,并在此类中处理异常(在任何控制器类中都不再处理异常):

package cn.tedu.csmall.product.ex.handler;
import cn.tedu.csmall.product.ex.ServiceException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler
    public String handleServiceException(ServiceException e) {
        return e.getMessage();
    }
    @ExceptionHandler
    public String handleNullPointerException(NullPointerException e) {
        return "程序出现了空指针异常,已经被处理!";
    }
    @ExceptionHandler
    public String handleRuntimeException(RuntimeException e) {
        return "程序出现了RuntimeException,已经被处理!";
    }
}

User login(String username, String password) throws 用户名不存在异常, 密码错误异常, 账号非法状态异常……
// boolean:表示登录成功,或登录失败
//             但是,无法表示哪种失败
// int:使用某个数据表示某种状态,例如1表示登录成功,2表示用户名错,3表示密码错,4表示封号,等等
//            但是,无法返回登录成功的结果

try {
    User user = service.login("root", "1234");
    // 将User对象保存到Session中
} catch (用户名不存在异常 e) {
} catch (密码错误异常 e) {
} catch (账号非法状态异常 e) {
}

到此这篇关于Spring异常实现统一处理的方法的文章就介绍到这了,更多相关Spring异常处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring中AOP概念与两种动态代理模式原理详解

    Spring中AOP概念与两种动态代理模式原理详解

    AOP是面向切面编程的技术,AOP基于IoC基础,是对OOP的有益补充,流行的AOP框架有Sping AOP、AspectJ,这篇文章主要给大家介绍了关于Spring中AOP概念与两种动态代理模式原理的相关资料,需要的朋友可以参考下
    2021-10-10
  • Java实现指定目录下的文件查找详解

    Java实现指定目录下的文件查找详解

    这篇文章主要介绍了利用Java实现指定目录下的文件查找的方法,能做到给出文件名,查找目录及其子目录中是否存在或者给出后缀名,查找目录及其子目录中相关的文件,感兴趣的可以学习一下
    2022-03-03
  • 使用postman传递list集合后台springmvc接收

    使用postman传递list集合后台springmvc接收

    这篇文章主要介绍了使用postman传递list集合后台springmvc接收的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • SpringCloud使用Feign实现动态路由操作

    SpringCloud使用Feign实现动态路由操作

    这篇文章主要介绍了SpringCloud使用Feign实现动态路由操作,文章围绕主题展开详细的内容介绍具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • java poi 读取单元格null或者空字符串方式

    java poi 读取单元格null或者空字符串方式

    这篇文章主要介绍了java poi 读取单元格null或者空字符串方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Boot整合Spring Cache及Redis过程解析

    Spring Boot整合Spring Cache及Redis过程解析

    这篇文章主要介绍了Spring Boot整合Spring Cache及Redis过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Spring实战之FileSystemResource加载资源文件示例

    Spring实战之FileSystemResource加载资源文件示例

    这篇文章主要介绍了Spring实战之FileSystemResource加载资源文件,结合实例形式分析了spring FileSystemResource加载xml资源文件的具体实现步骤与相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • struts1之ActionServlet详解_动力节点Java学院整理

    struts1之ActionServlet详解_动力节点Java学院整理

    这篇文章主要介绍了struts1之ActionServlet详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 三道java新手入门面试题,通往自由的道路--多线程

    三道java新手入门面试题,通往自由的道路--多线程

    这篇文章主要为大家分享了最有价值的3道多线程面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,对hashCode方法的设计、垃圾收集的堆和代进行剖析,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Spring Boot之过滤器 Filter注入的方式解析

    Spring Boot之过滤器 Filter注入的方式解析

    这篇文章主要介绍了Spring Boot之过滤器 Filter注入的方式解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论