spring异常处理

spring异常处理 异常必须以某种方式转换为响应。

Spring提供了多种方式将异常转化为响应

  • Spring的一些异常会默认映射为HTTP状态码
  • 自定义异常上可以添加@ResponseStatus注解,从而将其映射为某一个HTTP状态码
  • 在controller方法上添加@ExceptionHandler注解,使其用来处理指定类型异常

1.内置的将以异常转换为http码就不说了,由spring自身抛出,然后产生对应的HTTP状态码响应。

2.下例子用@ResponseStatus注解将MyException异常映射为HTTP状态码404。

@ResponseStatus(value = HttpStatus.NOT_FOUND,reason = "没有找到")
public class MyException extends RuntimeException {
}

3.对于添加了@ExceptionHandler注解的处理器方法,当前controller中的其他处理器方法抛出其映射的异常的时候,将会委托该方法来处理。

针对所有控制器的通用异常处理

@ExceptionHandler注解所标注的方法能够处理当前controller类中所有处理器方法的异常。

有没有一种方法能够处理所有controller中处理器方法所抛出的异常呢?
答案是:有的。
创建控制器基类,所有控制器类要扩展这个类,从而继承通用的@ExceptionHandler方法?
spring 引入了一个新的解决方案:控制器通知,很显然是aop原理。

控制器通知controlleradvice)是任意带有@ControllerAdvice注解的类,这个类会包含一个或多个如下类型的方法:

  • @ExceptionHandler注解标注的方法;
  • @InitBinder注解标注的方法;
  • @ModelAttribute注解标注的方法

以上所述的这些方法会运用到所有controller中带有@RequestMapping注解的方法上

@ControllerAdvice注解本身已经使用了@Component注解,所以它是一个spring 组件。

//@ControllerAdvice注解源码
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface ControllerAdvice{...

**总结:**创建控制器通知类(@ControllerAdvice注解),在类中使用@ExceptionHandle注解定义通用异常处理方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值