Spring boot 自定义统一异常处理(以及规范响应格式)

来源:互联网 发布:淘宝买的固话办信用卡 编辑:程序博客网 时间:2024/05/30 12:29

代码:

ResultDTO.java

public class ResultDTO<T> {    private String resultCode;//结果编码    private String resultMsg;//结果信息    private T result;//结果内容    public String getResultCode() {        return resultCode;    }    public void setResultCode(String resultCode) {        this.resultCode = resultCode;    }    public String getResultMsg() {        return resultMsg;    }    public void setResultMsg(String resultMsg) {        this.resultMsg = resultMsg;    }    public T getResult() {        return result;    }    public void setResult(T result) {        this.result = result;    }}

ResultEnum.java

public enum ResultEnum {    //**********  异常  ************    CODE_800000("800000", "系统异常!"),    CODE_800002("800002", "参数处理异常!"),    CODE_800003("800003", "业务系统调用异常!"),    //**********  失败  ************    CODE_800001("800010", "参数校验失败!"),    CODE_800010("800011", "业务系统调用失败!"),    //**********  成功  ************    CODE_9999("9999", "业务系统调用成功!"),    CODE_999999("999999", "交易成功!"),    ;    private String resultCode;//结果编码    private String resultMsg;//结果信息    ResultEnum(String code, String msg) {        this.resultCode = code;        this.resultMsg = msg;    }    public String getResultCode() {        return resultCode;    }    public String getResultMsg() {        return resultMsg;    }}

HandleException.java

import com.paic.icore.openapi_ui.common.enums.ResultEnum;public class HandleException extends RuntimeException{    private static final long serialVersionUID = 4474665452231795065L;    private String code;    public String getCode() {        return code;    }    public void setCode(String code) {        this.code = code;    }    public HandleException(ResultEnum resultEnum, String detailMsg) {        super(resultEnum.getResultMsg() + detailMsg);        this.code = resultEnum.getResultCode();    }}

ResultUtil.java

import com.paic.icore.openapi_ui.common.domain.ResultDTO;public class ResultUtil {    @SuppressWarnings({ "rawtypes", "unchecked" })    public static ResultDTO result(String resultCode, String resultMsg, Object result) {        ResultDTO resultDTO = new ResultDTO();        resultDTO.setResultCode(resultCode);        resultDTO.setResultMsg(resultMsg);        resultDTO.setResult(result);        return resultDTO;    }}

验证:

TestException.java

import java.util.HashMap;import java.util.Map;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.alibaba.fastjson.JSONObject;import com.paic.icore.openapi_ui.common.Exception.HandleException;import com.paic.icore.openapi_ui.common.domain.ResultDTO;import com.paic.icore.openapi_ui.common.enums.ResultEnum;import com.paic.icore.openapi_ui.common.utils.ResultUtil;public class TestException {    private static final Logger logger = LoggerFactory.getLogger(TestException.class);    @SuppressWarnings("rawtypes")    public static void main(String[] args) {        ResultDTO resultDTO = null;        try {            test();            logger.info("交易成功!");            Map<String, Object> successMap = new HashMap<String, Object>();            successMap.put("policyNo", "1234567890001");            resultDTO = ResultUtil.result(ResultEnum.CODE_999999.getResultCode(),ResultEnum.CODE_999999.getResultMsg(), successMap);        } catch (HandleException e) {            logger.error("抛出HandleException异常啦!", e);            resultDTO = ResultUtil.result(e.getCode(), e.getMessage(), null);        } catch (Exception e) {            logger.error("抛出Exception异常啦!", e);            resultDTO = ResultUtil.result(ResultEnum.CODE_800000.getResultCode(), ResultEnum.CODE_800000.getResultMsg(), null);        }        logger.info("出参:"+JSONObject.toJSONString(resultDTO));    }    private static void test() throws HandleException {        //验证Exception//      String str = null;//      str.toString();        //验证HandleException        throw new HandleException(ResultEnum.CODE_800001, "入参不可为空!");        //验证成功情况//      logger.info("逻辑处理成功成功!");    }}

验证结果:

出参:{“resultCode”:”800010”,”resultMsg”:”参数校验失败!入参不可为空!”}

注意:

代码编写的时候最好注意一下层级结构(便于后期维护和统一管理,层级也更清晰)
这里写图片描述

阅读全文
0 0