自定义异常要继承RuntimeException,继承Exception是没有事务回滚的,继承RuntimeException有事务回滚。
使用 @ControllerAdvice 实现全局异常处理
@ExceptionHandler(value = Exception. class )
自动的事务回滚只支持 RuntimeException
修改之前的异常捕获类
定义自己的异常类,异常要有编号,方便排查,自己创建的异常类需要继承RuntimeException
Spring框架只会对抛出的异常是runtimeException时事物才会回滚
统一捕获Exception异常
throw 继承RuntimeException()里面会统一处理异常message
controller也不catch统一交给使用@controlleradvice注解的类进行处理
使用@controlleradvice的方法要使用@ExceptionHandler(value写对应要catch的异常)
只有RuntimeException才可以事务回滚以区别于Exception
笔记 异常捕获 @ControllerAdvice
Spring框架中只对RuntimeException进行事务回滚,而Exception则不会回滚。
自定义Exception
为了方便异常处理,需要创建异常类:xxxException->
需要有成员变量
需要有gettter&&setter方法
一定要继承RuntimeException!!!!因为spring-boot不会回滚Exception的事务
统一异常处理第一步:
创建handle类,类名上加@ControllerAdvice
方法名上加@ExceptionHandler(vale = xxxException.class)
写异常类的时候一般继承RuntimeException,因为spring只对RuntimeException进行事务回滚。
统一异常处理
Service -> 不符合条件的则抛出异常
Controller ->抛异常,直接调用Service中的方法
创建Handle来捕获异常
添加handler包,其中的类添加@ControllerAdvice注解
方法中添加@ExceptionHandler(value=Exception.class),声明捕获哪个异常类
添加@ResponseBody,因为返回给浏览器是json格式 所以需要注明
spring框架只对RuntimeException进行事物回滚
添加handler包,其中的类添加@ControllerAdvice注解
统一异常处理的格式
自己建一个GirlException 类,可实现抛出Code,msg
在handle 异常捕获类,加一个判断(GirlException /Exception )
统一返回异常格式
建一个handle 类(@ControllerAdvice)用于捕获异常,封装返回.
@ExceptionHandler(value = Exception.class) @ResponseBody
统一异常处理;
用抛出异常的方法,抛出异常信息给http请求者;
从Service 层抛到 Controller 层 继续抛
异常异常,出了异常才抛(年龄小于..)
RunTimeException可以回滚
@ExceptionHandler:捕获的异常类
notes:
在service里面面修改了抛出的异常,那么在handle里面捕获的修改捕获异常的方式
如果是Java自己的exception,只能返回String内容,这样不能够,所以我们实现一个自己的exception
notes:
记得继承的是RuntimeException,Spring框架只对抛出的异常是RuntimeException才会进行对事务的回滚(如果是Exception是不会进行事务回滚的)
在构造方法里面我们自己存一个code,另外由于父类的构造方法肯定会传一个message进来,所以采用super(message)
这种方式,会将异常捕获,然后返回的内容就会按照我们想要的方式返回
过程:
service里面如果验证不通过的话,就直接往外面抛异常
controller直接调用service的方法
这个时候不需要对service的返回进行判断,因为已经通过抛出异常来解决问题了
由expection handle来处理这个异常
如果不建异常捕获的包,抛出的内容会很多,我们需要建立捕获异常的方法
抛异常会一层一层往外抛,从service,然后接着抛到controller
事务只会对RuntimeException 进行事务回滚,不会对Exception进行回滚。