SpringBoot 全局异常处理 前端获取后端抛出的异常 后台全局异常处理

//throw new BusinessException("aaaa");
//throw new SystemException("bbbb");
int aa = 1/0;
return ResultUtil.success("success");

新增编辑

success: function(data,status,xhr){
    if(data.status == 0){//成功
        //子窗口向父窗体传参数(取消时不刷新)
        parent.$("#childReturnData").val("save");
        //关闭当前窗口页
        var mylay = parent.layer.getFrameIndex(window.name);
        parent.layer.close(mylay);
    }else if(data.status == -1){//失败
        layer.alert(data.msg, {icon: 0});
    }else{//异常
        layer.alert("异常:" + xhr.responseText, {icon: 2});
    }
},
error:function(xhr,status,error){
    layer.alert("失败:" + xhr.responseText, {icon: 2});
},

新删除

success: function(data,status,xhr){
    if(data.status == 0){//成功
        $("#tb_Table").bootstrapTable('refresh');
    }else if(data.status == -1){//失败
        layer.alert(data.msg, {icon: 0});
    }else{//异常
        layer.alert("异常:" + xhr.responseText, {icon: 2});
    }
},
error:function(xhr,status,error){
    layer.alert("失败:" + xhr.responseText, {icon: 2});
}

新建包exception放3个下面的java文件

ExceptionAdvice.java
package com.qyj.exception;

import com.qyj.utils.ResultUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class ExceptionAdvice {
    public static Logger logger = LoggerFactory.getLogger(ExceptionAdvice.class);

    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public ResultUtil handleException(RuntimeException e) {
        logger.error("服务异常:", e);
        //return ResultUtil.fail(-2, e.getMessage());
        return ResultUtil.fail(-2, e.toString());
    }

    @ExceptionHandler(SystemException.class)
    @ResponseBody
    public ResultUtil handleException(Exception e) {
        logger.error("系统异常:", e);
        return ResultUtil.fail(-2, e.getMessage());
    }

    @ExceptionHandler(BusinessException.class)
    @ResponseBody
    public ResultUtil doBusinessException(Exception e) {
        logger.error("业务异常:", e);
        return ResultUtil.fail(-2, e.getMessage());
    }
}

 SystemException.java

package com.qyj.exception;

public class SystemException extends  RuntimeException {
	private String code;
 
	public SystemException() {
		super();
	}
 
	public SystemException(String message) {
		super(message);
	}
 
	public SystemException(String code, String message) {
		super(message);
		this.code = code;
	}
 
	public SystemException(Throwable cause) {
		super(cause);
	}
 
	public SystemException(String message, Throwable cause) {
		super(message, cause);
	}
 
	public SystemException(String message, Throwable cause,
                           boolean enableSuppression, boolean writableStackTrace) {
		super(message, cause, enableSuppression, writableStackTrace);
	}
 
	public String getCode() {
		return code;
	}
 
	public void setCode(String code) {
		this.code = code;
	}
 
	@Override
	public String getMessage() {
		return super.getMessage();
	}
 
	@Override
	public String toString() {
		return this.code + ":" + this.getMessage();
	}
}
BusinessException.java
package com.qyj.exception;

public class BusinessException extends  RuntimeException {
	private String code;
 
	public BusinessException() {
		super();
	}
 
	public BusinessException(String message) {
		super(message);
	}
 
	public BusinessException(String code, String message) {
		super(message);
		this.code = code;
	}
 
	public BusinessException(Throwable cause) {
		super(cause);
	}
 
	public BusinessException(String message, Throwable cause) {
		super(message, cause);
	}
 
	public BusinessException(String message, Throwable cause,
							 boolean enableSuppression, boolean writableStackTrace) {
		super(message, cause, enableSuppression, writableStackTrace);
	}
 
	public String getCode() {
		return code;
	}
 
	public void setCode(String code) {
		this.code = code;
	}
 
	@Override
	public String getMessage() {
		return super.getMessage();
	}
 
	@Override
	public String toString() {
		return this.code + ":" + this.getMessage();
	}
}
ResultUtil.java
package com.qyj.utils;

import java.io.Serializable;
import java.util.List;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ResultUtil implements Serializable{
    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();

    // 响应业务状态
    private Integer status;//0成功 -1失败 -2异常
    //like12 add,20210902
    private String result;//success fail
    // 响应消息
    private String msg;
    // 响应中的数据
    private Object data;
    // 响应中的token
    private String token;

    //构造函数
    //like12 modified,20210901,只返msg不返data
    public ResultUtil(Integer status, String msg) {
        this.status = status;
        this.msg = msg;
        //like12 add,20210902
        if(status == 0){
            this.result = "success";
        }else{
            this.result = "fail";
        }
    }
    public ResultUtil(Integer status, String msg, Object data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
        //like12 add,20210902
        if(status == 0){
            this.result = "success";
        }else{
            this.result = "fail";
        }
    }
    public ResultUtil(Integer status, String msg, Object data, String token) {
        this.status = status;
        this.msg = msg;
        this.data = data;
        this.token = token;
        //like12 add,20210902
        if(status == 0){
            this.result = "success";
        }else{
            this.result = "fail";
        }
    }
    //like12 add,20210902
    public ResultUtil(Integer status, String result, String msg) {
        this.status = status;
        this.result = result;
        this.msg = msg;
    }
    public ResultUtil(Integer status, String result, String msg, Object data) {
        this.status = status;
        this.result = result;
        this.msg = msg;
        this.data = data;
    }

    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getResult() {
        return result;
    }
    public void setResult(String result) {
        this.result = result;
    }

    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }

    //成功
    //like12 modified,20210901,只返msg不返data
    public static ResultUtil success(String msg) {
        return new ResultUtil(0, msg);
    }
    public static ResultUtil success(String msg, Object data) {
        return new ResultUtil(0, msg, data);
    }

    //失败
    //like12 modified,20210901,只返msg不返data
    public static ResultUtil fail(String msg) {
        return new ResultUtil(-1, msg);
    }
    public static ResultUtil fail(String msg, Object data) {
        return new ResultUtil(-1, msg, data);
    }
    //like12 add,20220414,支持多种失败返回情况(如:异常)
    public static ResultUtil fail(Integer status, String msg) {
        return new ResultUtil(status, msg);
    }
    public static ResultUtil fail(Integer status, String msg, Object data) {
        return new ResultUtil(status, msg, data);
    }

    //自定义返回
    public static ResultUtil build(Integer status, String msg) {
        return new ResultUtil(status, msg);
    }
    public static ResultUtil build(Integer status, String msg, Object data) {
        return new ResultUtil(status, msg, data);
    }
    public static ResultUtil build(Integer status, String msg, Object data, String token) {
        return new ResultUtil(status, msg, data, token);
    }
    //like12 add,20210902
    public static ResultUtil build(Integer status, String result, String msg) {
        return new ResultUtil(status, result, msg);
    }
    public static ResultUtil build(Integer status, String result, String msg, Object data) {
        return new ResultUtil(status, result, msg, data);
    }

    /**
     * 没有object对象的转化
     *
     * @param json
     * @return
     */
    public static ResultUtil format(String json) {
        try {
            return MAPPER.readValue(json, ResultUtil.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 将json结果集转化为TaotaoResult对象
     *
     * @param jsonData json数据
     * @param clazz TaotaoResult中的object类型
     * @return
     */
    public static ResultUtil formatToPojo(String jsonData, Class<?> clazz) {
        try {
            if (clazz == null) {
                return MAPPER.readValue(jsonData, ResultUtil.class);
            }
            JsonNode jsonNode = MAPPER.readTree(jsonData);
            JsonNode data = jsonNode.get("data");
            Object obj = null;
            if (clazz != null) {
                if (data.isObject()) {
                    obj = MAPPER.readValue(data.traverse(), clazz);
                } else if (data.isTextual()) {
                    obj = MAPPER.readValue(data.asText(), clazz);
                }
            }
            return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
        } catch (Exception e) {
            return null;
        }
    }
    /**
     * Object是集合转化
     *
     * @param jsonData json数据
     * @param clazz 集合中的类型
     * @return
     */
    public static ResultUtil formatToList(String jsonData, Class<?> clazz) {
        try {
            JsonNode jsonNode = MAPPER.readTree(jsonData);
            JsonNode data = jsonNode.get("data");
            Object obj = null;
            if (data.isArray() && data.size() > 0) {
                obj = MAPPER.readValue(data.traverse(),
                        MAPPER.getTypeFactory().constructCollectionType(List.class, clazz));
            }
            return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
        } catch (Exception e) {
            return null;
        }
    }
}

 参考:

https://www.jb51.net/article/229125.htm

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值