zoukankan      html  css  js  c++  java
  • SpringBoot中全局异常处理

    参考:这里

    统一返回UI格式类型

     1 public class CommonReturnType {
     2     //返回给UI的数据
     3     private Object data;
     4     //返回给UI的状态
     5     private String status;
     6 
     7     public static CommonReturnType create(Object result){
     8         //默认返回状态为success
     9         return CommonReturnType.create(result,"success");
    10     }
    11     public static CommonReturnType create(Object result,String status){
    12         CommonReturnType type = new CommonReturnType();
    13         type.setData(result);
    14         type.setStatus(status);
    15         return type;
    16     }
    17 
    18     public Object getData() {
    19         return data;
    20     }
    21 
    22     public void setData(Object data) {
    23         this.data = data;
    24     }
    25 
    26     public String getStatus() {
    27         return status;
    28     }
    29 
    30     public void setStatus(String status) {
    31         this.status = status;
    32     }
    33 }

    自定义异常格式

    1 public interface CommonError {
    2     public int getErrCode();
    3     public String getErrMsg();
    4     public CommonError setErrMsg(String errMsg);
    5 }
     1 public enum EmBusinessError implements CommonError{
     2     //10000开头为通用错误类型
     3     PARAMETER_VALIDATION_ERROR(10001,"参数不合法"),
     4 
     5     //未知错误
     6     UNKNOW_ERROR(10002,"未知错误"),
     7 
     8     //20000开头为用户信息相关错误
     9     USER_NOT_EXIST(20001,"用户不存在"),
    10     User_LOGIN_ERROR(20002,"手机号或密码错误"),
    11     User_NOT_LOGIN(20003,"用户未登陆"),
    12 
    13     //30000开头为交易信息异常
    14     STOCK_NOT_ENOUGH(30001,"库存不足")
    15     ;
    16     private int errCode;
    17     private String errMsg;
    18 
    19     EmBusinessError(int errCode, String errMsg) {
    20         this.errCode = errCode;
    21         this.errMsg = errMsg;
    22     }
    23 
    24     @Override
    25     public int getErrCode() {
    26         return this.errCode;
    27     }
    28 
    29     @Override
    30     public String getErrMsg() {
    31         return this.errMsg;
    32     }
    33 
    34     @Override
    35     public CommonError setErrMsg(String errMsg) {
    36         this.errMsg = errMsg;
    37         return this;
    38     }
    39 }
     1 public class BusinessException extends Exception implements CommonError {
     2     private CommonError commonError;
     3 
     4     //直接接收EmBussinessError的传参用于构造业务异常
     5     public BusinessException(CommonError commonError){
     6         super();
     7         this.commonError=commonError;
     8     }
     9 
    10     //接受自定义errMsg方式构造业务异常
    11     public BusinessException(CommonError commonError,String errMsg){
    12         super();
    13         this.commonError=commonError;
    14         this.commonError.setErrMsg(errMsg);
    15     }
    16 
    17     @Override
    18     public int getErrCode() {
    19         return this.commonError.getErrCode();
    20     }
    21 
    22     @Override
    23     public String getErrMsg() {
    24         return this.commonError.getErrMsg();
    25     }
    26 
    27     @Override
    28     public CommonError setErrMsg(String errMsg) {
    29         return this.commonError.setErrMsg(errMsg);
    30     }
    31 }

    全局异常处理器

     1 import com.wu.error.BusinessException;
     2 import com.wu.error.EmBusinessError;
     3 import com.wu.response.CommonReturnType;
     4 import org.springframework.web.bind.ServletRequestBindingException;
     5 import org.springframework.web.bind.annotation.ControllerAdvice;
     6 import org.springframework.web.bind.annotation.ExceptionHandler;
     7 import org.springframework.web.bind.annotation.ResponseBody;
     8 import org.springframework.web.servlet.NoHandlerFoundException;
     9 
    10 import javax.servlet.http.HttpServletRequest;
    11 import javax.servlet.http.HttpServletResponse;
    12 import java.util.HashMap;
    13 import java.util.Map;
    14 
    15 @ControllerAdvice
    16 public class GlobalExceptionHandler{
    17     @ExceptionHandler(Exception.class)
    18     @ResponseBody
    19     public CommonReturnType doError(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Exception ex) {
    20         ex.printStackTrace();
    21         Map<String,Object> responseData = new HashMap<>();
    22         if( ex instanceof BusinessException){
    23             BusinessException businessException = (BusinessException)ex;
    24             responseData.put("errCode",businessException.getErrCode());
    25             responseData.put("errMsg",businessException.getErrMsg());
    26         }else if(ex instanceof ServletRequestBindingException){
    27             responseData.put("errCode", EmBusinessError.UNKNOW_ERROR.getErrCode());
    28             responseData.put("errMsg","url绑定路由问题");
    29         }else{
    30             responseData.put("errCode", EmBusinessError.UNKNOW_ERROR.getErrCode());
    31             responseData.put("errMsg",EmBusinessError.UNKNOW_ERROR.getErrMsg());
    32         }
    33         return CommonReturnType.create(responseData,"fail");
    34     }
    35 }
    作者:wuba
    出处:http://www.cnblogs.com/wuba/
    版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议。转载请注明出处!
  • 相关阅读:
    给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
    js 中怎么使 if(aᅠ==1 && a== 2 && ᅠa==3) 返回 true?
    最新Hadoop-2.7.2+hbase-1.2.0+zookeeper-3.4.8 HA高可用集群配置安装
    spring 4 + jpa(hibernate 3/4) + spring mvc 多数据源配置(二)+Druid连接池
    activiti 学习由浅入深
    hadoop2.4.1+hbase0.98.3实现的分布式网盘系统初步(已开源)
    【Note】Linux
    记初学CMMI,跳出码农搬砖时代,人人都是经营者
    java8_接口中的默认方法与静态方法
    java8_Stream
  • 原文地址:https://www.cnblogs.com/wuba/p/11420597.html
Copyright © 2011-2022 走看看