自定义异常和全局异常的处理 (转)

自定义异常

复制代码
/**
 * @ClassName MyException
 * @Description 自定义异常类
 * @Author 洛城天使
 * @Date 2021/9/21 16:25
 * @Version 1.0
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class MyException extends RuntimeException {

    private String code;  //异常状态码
    private String message;  //异常信息
    private String method;   //发生的方法,位置等
    private String description;   //描述

    public MyException(String code, String message, String method, String description) {
        this.code = code;
        this.message = message;
        this.method = method;
        this.description = description;
    }
}
复制代码

全局异常

复制代码
/**
 * @ClassName GlobalExceptionHandler
 * @Description 全局异常处理器
 * @Author 洛城天使
 * @Date: 2021/9/21 16:16
 * @Version 1.0
 */
@RestControllerAdvice
public class GlobalExceptionHandler {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * 捕获并处理自定义异常
     */
    @ExceptionHandler(MyException.class)
    public String handleMyException(MyException e) {
        Map<String, Object> map = new HashMap<>();
        map.put("code", e.getCode());
        map.put("message", e.getMessage());
        map.put("method", e.getMethod());
        map.put("description", e.getDescription());
        logger.error(e.getCode());
        logger.error(e.getMessage());
        logger.error(e.getMethod());
        logger.error(e.getDescription());
        return MsgUtil.errorMsg(map);
    }

    /**
     * 处理所有异常
     */
    @ExceptionHandler(Exception.class)
    public void handleException(Exception e) {
        e.printStackTrace();
        logger.error(e.toString());
    }
}
复制代码

 返回值工具类

复制代码
/**
 * @Description 返回Json字符串工具类
 * @Author 洛城天使
 * @Date 2021/9/21 16:25
 * @Version 1.0
 **/
public class MsgUtil {

    /**
     * 传入String可变参数的返回值
     */
    public static String successMsg(String... str) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("msg", "ok");
        if (str.length == 0) {
            return jsonObject.toJSONString();
        } else if (str.length == 1) {
            jsonObject.put("data", str[0]);
            return jsonObject.toJSONString();
        } else if (str.length % 2 != 0) {
            return "请输入大于1的偶数个参数";
        } else {
            for (int i = 0; i < str.length; i++) {
                jsonObject.put(str[i], str[i++]);
            }
        }
        return jsonObject.toJSONString();
    }

    /**
     * 传入Map参数的返回值
     */
    public static String successMsg(Map map) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("msg", "ok");
        jsonObject.put("data", JSONObject.parseObject(JSON.toJSON(map).toString()));
        return jsonObject.toJSONString();
    }

    /**
     * 传入List参数的返回值
     */
    public static String successMsg(List list) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("msg", "ok");
        jsonObject.put("data", new JSONArray().addAll(list));
        return jsonObject.toJSONString();
    }

    public static String errorMsg() {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("msg", "error");
        return jsonObject.toJSONString();
    }

    public static String errorMsg(String failInfo) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("msg", "error");
        jsonObject.put("info", failInfo);
        return jsonObject.toJSONString();
    }

    public static String errorMsg(Map map) {
        return JSONObject.parseObject(JSON.toJSON(map).toString()).toJSONString();
    }

}
复制代码

 

posted @   Yapi酱  阅读(75)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示