在开发中我们都会遇到产生异常情况,如果直接将异常反馈给用户,就会大大的降低用户的体验效果,这里就出现了异常的捕捉,一般用try{
}catch(){
}
对异常进行捕捉,但当出现很多类中都需要有异常捕捉,或者说有很多异常需要捕捉时,代码的美观性就会大大的降低,这里就出现了全局的异常捕捉,只需要在出现异常的地方,将异常抛出,一直往上级抛,抛到最后的异常类再进行捕捉,这样大大的提升了代码的美观性,和代码的简洁性
这里,我给大家分享一种我认为很好用的异常捕捉。
先给大家写上开发的步骤
1、创建异常类BaseException(该类中建立需要抛出异常类型和传参数的构造方法,根据不同的参数来抛出不同的异常信息),该类需要继承Exception类
2、在controller层中新建一个异常通知类ControllerAdvice(俗称异常捕捉类),为该类添加@ControllerAdvice的注解(该注解定义于@ExceptionHandler,@InitBinder,@ModelAttribute,也可应用与所有的@RequestMapping中,是spring3.2中新添加的注解,功能非常强大)
3、在ControllerAdvice类中写异常处理的方法,方法中需额外添加@ExceptionHandlez注解,这样就能被@ControllerAdvice注解所识别,知道是异常处理的方法啦
4、最后在想要处理异常的地方进行异常的抛出
现在上异常类的代码
public class BaseException extends Exception{
private static final long serialVersionUID = 1L;
private String code;
private String message;
public BaseException(String code, String message) {
super(message);
this.code = code;
this.message = message;
}
public BaseException(String message) {
super(message);
this.message = message;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
这里写异常捕捉类ControllerAdvice
@ControllerAdvice
public class AdviceController {
private final static Logger logger = LoggerFactory.getLogger(AdviceController.class);
@ResponseBody
@ExceptionHandler(Exception.class)
public Object processRuntimeException(Exception e) {
if(e instanceof BaseException){
logger.error("ERROR", e);
return ReturnUtil.busError(((BaseException)e).getErrorMsg());
}else if(e instanceof HttpMessageNotReadableException){
logger.error("ERROR", e);
return ReturnUtil.busError(e.getMessage());
}
else{
logger.error("system error", e);
return ReturnUtil.sysError("system error");
}
}
}
最后上抛出异常的代码块
throw new BaseException("这里填写异常信息");
throw new BaseException("这里填写错误编码","这里填写异常信息");
好了,到这里就大功告成了,祝愿各位小猿猿工作一切顺利