Spring异常处理器

这篇具有很好参考价值的文章主要介绍了Spring异常处理器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 异常分析

 问题:
  程序允许不免的在各层都可能会产生异常,我们该如何处理这些异常? 如果只是在方法里面单独使用 try… catch… 语句去一个一个的进行捕捉处理的话,那毫无疑问是不现实的,因为异常数量是非常庞大的并且对于异常的出现种类是不可预料的,于是我们可以使用Spring框架提供的异常处理器进行处理。

 解决: 使用异常处理器在表现层进行统一处理(异常通过表现层进行逐层调用, 最后也都会抛回到表现层当中, 所以一般可以写在表现层进行处理)

2. 异常处理器

2.1 异常处理器核心

@ControllerAdvice: 声明其为异常处理器类, 用来处理系统当中的异常
@ResponseBody: 声明其返回数据放在返回体当中(用于返回异常处理之后的数据交给前端)
@RestControllerAdvice = @ControllerAdvice + @ResponseBody

关键: 在每个异常处理方法的上面需要使用对应注解声明其处理异常的种类
@ExceptionHandler(xxx.class)
@ControllerAdvice // 注意此类需要让Spring配置类扫描
@ResponseBody
public class GlobalExceptionHandler {

	@ExceptionHandler(Exception.class) // 处理全部异常
	public String doException(Exception ex){ // 用形参来接收异常
		/*
			1. 记录日志(错误堆栈)
			2. 发送邮件 -- 开发人员
			3. 发送邮件 -- 运维人员
		 */
		System.out.println(ex.getMessage());
		return "发生了Exception类型的异常.....";
	}
}

  Controller层

@RestController
public class AController {

	@RequestMapping("/TestA")
	public String TestA(){
		System.out.println("This is Test A");
		int x = 1 / 0;
		return "Successful connect TestA .......";
	}
}

  处理结果
Spring异常处理器,JavaWeb,spring,java,后端

2.2 异常处理顺序

  异常处理若具有包含关系,则会优先匹配更精确的处理器(即优先处理子类, 若子类不匹配再逐渐向上匹配)

@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {
	@ExceptionHandler(Exception.class) // 处理全部异常
	public String doException(Exception ex){ // 用形参来接收异常
		System.out.println(ex.getMessage());
		System.out.println("发生了Exception类型的异常.....");
		return "发生了Exception类型的异常.....";
	}

	@ExceptionHandler(ArithmeticException.class) // 处理算术异常
	public String doZeroException(ArithmeticException ex){ // 用形参来接收异常
		System.out.println(ex.getMessage());
		System.out.println("发生了ArithmeticException类型的异常.....");
		return "发生了ArithmeticException类型的异常.....";
	}
}

Spring异常处理器,JavaWeb,spring,java,后端

3. 自定义异常

  用户可以根据自己的项目设置对应特定的异常然后再进行处理

public class MyException extends Exception{
	Integer id;
	public MyException(Integer id, String message){
		super(message); // 利用父类注明异常信息
		this.id = id;
	}

	@Override
	public String toString() {
		return "异常的ID为:" + id + "\n" +
				"异常的详细信息为" + getMessage();
	}
}

@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {
	@ExceptionHandler(MyException.class) // 处理自定义异常
	public String MyException(MyException ex){
		System.out.println(ex.getMessage());
		return "自定义异常";
	}

}

@RestController
public class AController {

	@RequestMapping("/TestA")
	public String TestA() throws MyException {
		System.out.println("This is Test A");
		throw new MyException(101, "101号自定义异常.....");
	}
}

Spring异常处理器,JavaWeb,spring,java,后端文章来源地址https://www.toymoban.com/news/detail-541280.html

到了这里,关于Spring异常处理器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring MVC文件上传及全局异常处理器

    编写controller 在index.jsp里面定义超链接 如果不加以异常处理,错误信息肯定会抛在浏览器页面上,这样很不友好,所以必须进行异常处理。 系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图: 编写c

    2024年01月18日
    浏览(49)
  • Springboot +spring security,自定义认证和授权异常处理器

    在Spring Security中异常分为两种: AuthenticationException 认证异常 AccessDeniedException 权限异常 我们先给大家演示下如何自定义异常处理器,然后再结合源码帮助大家进行分析 如何创建一个SpringSecurity项目,前面文章已经有说明了,这里就不重复写了。 3.1配置SecurityConfig 这里主要是

    2024年02月07日
    浏览(42)
  • 【Spring】BeanPostProcessor后置处理器

    BeanPostProcessor后置处理器是Spring提供的一个扩展点,可以在Bean初始化前后做一些事情,注意这里是bean的初始化,不是实例化,BeanPostProcessor是一个接口,里面提供了两个方法,分别为postProcessBeforeInitialization(初始化之前)和postProcessAfterInitialization(初始化之后),在方法入参

    2024年02月08日
    浏览(49)
  • spring框架_常见工厂后处理器

    ConfigurationClassPostProcessor :用于解析@ComponentScan @Bean @Import @ImportResource MapperSacnnerConfigurer :相当于Mybatis的@MapperScanner 用于解析被标注的@Mapper接口 @mapper 注解的解析:@mapper注解是mybatis提供的,用于标明一个接口,spring自然无法管理接口,要将这个接口转化为一个bean加入到beanfa

    2024年02月05日
    浏览(45)
  • spring 详解三 IOC(spring实例化及后处理器)

    Spring在容器初始化的时候,读取XMl配置,将其封装成 BeanDefinition(Bean定义)对象 ,描述所有bean的信息 BeanDefinition会 注册存储到beanDefinitionMap集合中 Spring框架 遍历beanDefinitionMap,使用反射创建Bean实例对象 创建好之后的对象 存储在singletonObjects的map集合中,当getBean时,从该map中

    2024年02月13日
    浏览(76)
  • Spring源码学习-后置处理器,Autowired实现原理

    Autowired实现原理 populateBean 给创建好的bean实例进行普通属性的赋值 InstantiationAwareBeanPostProcessor AutowiredAnnotationBeanPostProcessor 这个就是用来完成Autowired注解能够自动装配的bean后置处理器 这个方法初始化了一个set,用来存放需要解析的自动装配注解,里面就包括Autowired,Value和Inject等

    2024年02月16日
    浏览(43)
  • 警告:未配置spring boot 配置注解处理器

    前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 问题 我再使用@ConfigurationProperties(prefix = “redisson”)去加载配置文件中的属性的时候,发现idea有个警告 并且配置文件里面还有警告 虽然项目能够正常运行,可

    2024年01月19日
    浏览(43)
  • Spring源码解析(八):bean后置处理器CommonAnnotationBeanPostProcessor

    Spring源码系列文章 Spring源码解析(一):环境搭建 Spring源码解析(二):bean容器的创建、默认后置处理器、扫描包路径bean Spring源码解析(三):bean容器的刷新 Spring源码解析(四):单例bean的创建流程 Spring源码解析(五):循环依赖 Spring源码解析(六):bean工厂后置处理器ConfigurationCla

    2024年02月13日
    浏览(49)
  • Spring后置处理器BeanFactoryPostProcessor与BeanPostProcessor源码解析

    Spring有两种类型的后置处理器,分别是 BeanFactoryPostProcessor 和 BeanPostProcessor ,这里再贴出我画的 Spring 启动过程,可以看看这两种后置处理器在 Spring 启动过程中位置。 BeanFactoryPostProcessor 的 postProcessBeanFactory 方法在 Spring 容器启动时被调用,可以对整个容器中的 BeanDefinition (

    2024年02月13日
    浏览(52)
  • (Bean工厂的后处理器入门)学习Spring的第七天

    一 . Bean工厂的后处理器入门 : 直接上图 BeanDefinitionRegistyPostProcessor 为 BeanFactoryProcessor的子接口 , 前者先执行(图里只有Bean工厂的后处理器第一个类型) 如下图 : 这两个接口可改变两个Map(BeanDefinitionMap , singletonObject)里的信息 (黑马只讲了BeanFactoryPostProcessor , 第二个应该不重要)

    2024年01月23日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包