背景:通一处理异常可以更好的控制交互,不会出现一些乱七八糟的报错信息返回给客户,并且可扩展。
注解:@ControllerAdvice : 通一处理异常的标识,其实就是一个Controller
@ExceptionHandler(VixInsufficientException.class) 要拦截的异常
一,定义全局异常处理类
import com.messcat.framework.common.json.JsonResponse;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 全局通一异常处理
*
* @author sy
* @date 2019/8/29 15:53
*/
@ControllerAdvice
//@ConditionalOnMissingClass("GlobalExceptionController") 哪个class不存在是加载bean
public class GlobalExceptionController {
@ExceptionHandler(VixInsufficientException.class)
@ResponseBody
public JsonResponse vixInsufficientException(VixInsufficientException e) {
return JsonResponse.genericError(BizExceptionEnum.VixInsufficientException.getCode(),BizExceptionEnum.VixInsufficientException.getMessage());
}
}
二,定义枚举类存放异常的数据:code,message
/**
* 异常的枚举类
* @author sy
* @date 2019/8/29 15:59
*/
public enum BizExceptionEnum {
VixInsufficientException(600,"该参数不合法");
private Integer code;
private String message;
BizExceptionEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
三,定义异常类:继承RuntimeException
/**
* 异常类
* @author sy
* @date 2019/8/29 15:56
*/
public class VixInsufficientException extends RuntimeException {
public VixInsufficientException(){
super();
}
}
四,在业务方法中校验时可抛出异常,回滚事务,
//@Transactional(rollbackFor = Exception.class)
//如果有需要就加事务,根据业务而定,只能用于非分布式事务
public void test(Long id){
if(id==null){
return new VixInsufficientException();
}
}
大家有什么问题可以评价留言,一起学习,一起进步!