此方式优点是不用再control层进行try catch了
此方式的缺点恰恰也是只能反馈control层的相关异常
首先我们定义一下,创建全局异常控制类,并在类头上添加注解:@controllerAdvice
@ControllerAdvice
public class GlobalExceptionHandler {
}
在方法中写入自定义异常抛出方法:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
String handleException(){
return "Exception Deal!";
}
}
handleException方法就会抛出所有control层抛出的异常,这是最简单的demo
同时在@ExceptionHandler中也可以自定义一些异常,比如说我定义一个业务异常
public class BussinessException extends RuntimeException {
public BussinessException(Throwable e) {
super(e.getMessage(), e);
}
}
使用这个异常:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(BussinessException.class)
@ResponseBody
String handleException(){
return "Exception Deal!";
}
}
举例我们有一个service
public class TestService {
public POP update(POP pop){
....
....
if(...){
BSUtil.isTrue(false);
}
// ......
return null;
}
}
自定义一个BSUtil
public static void isTrue(boolean expression){
if(!expression) {
throw new BusinessException(error);
}
}
当我们的control层去使用这个TestServer的时候我们不用去写trycatch就可以抛出我们自定义的异常了
其实,被 @ExceptionHandler 注解的方法还可以声明很多参数,详见文档。