全局处理代码

全局异常处理


import com.c26.common.utils.SpringContextUtil;
import com.c26.project.demo.dto.ResultData;
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主要用来处理全局数据,一般搭配@ExceptionHandler、@ModelAttribute以及@InitBinder使用。
 *  https://blog.youkuaiyun.com/qq_43581790/article/details/123871439
 *  @author 陈植斌
 *  @date 2022/10/27 15:20
 */
@ControllerAdvice
public class ExceptionAdvice {
    private final static Logger logger = LoggerFactory.getLogger(ExceptionAdvice.class);

    /***
     *  全局异常处理
     *  @ExceptionHandler
     *  @author 陈植斌
     *  @date 2022/10/27 15:21
     */
    @ExceptionHandler
    @ResponseBody
    public ResultData<Object> exceptionHandler(Exception ex) {
        ex.printStackTrace();
        logger.error(ex.getMessage(), ex);
        return new ResultData<>(120, SpringContextUtil.isActiveProd() ? "系统内部异常" : "系统内部异常:" + ex.getMessage());
    }
}

工具类 SpringContextUtil

用于区分开发环境


import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import java.util.Locale;

@SuppressWarnings("unchecked")
@Component
public class SpringContextUtil implements ApplicationContextAware {

    private static ApplicationContext context = null;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        this.context = applicationContext;
    }

    public static Object getBeanObject(String name) {
        return context.getBean(name);
    }

    public static <T> T getBean(String beanName) {
        return (T) context.getBean(beanName);
    }

    public static <T> T getBean(Class<T> clazz) {
        return context.getBean(clazz);
    }

    // 国际化使用
    public static String getMessage(String key) {
        return context.getMessage(key, null, Locale.getDefault());
    }

    // 获取当前环境
    public static String getActiveProfile() {
        return context.getEnvironment().getActiveProfiles()[0];
    }

    // Active是否配置为生产环境
    public static boolean isActiveProd() {
        return "prod".equals(context.getEnvironment().getActiveProfiles()[0]);
    }
}

工具类 ResultData

用于处理返回数据


import java.io.Serializable;

public class ResultData<T> implements Serializable {
    private static final long serialVersionUID = 1L;


    public static final int SUCCESS_CODE = 0;

    public static final int FAIL_CODE = 1;


    /**
     * 默认0(0:成功;1;失败)
     */
    private Integer code = 0;

    private String msg;

    private T data;

    public ResultData() {
    }

    public ResultData(Integer code) {
        this.code = code;
    }

    public ResultData(String msg) {
        this.msg = msg;
    }

    public ResultData(T data) {
        this.data = data;
    }

    public ResultData(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public ResultData(Integer code, T data) {
        this.code = code;
        this.data = data;
    }

    public ResultData(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

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

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public static <T> ResultData<T> success() {
        return new ResultData<T>(SUCCESS_CODE);
    }

    public static <T> ResultData<T> success(T data) {
        return new ResultData<T>(SUCCESS_CODE, data);
    }

    public static <T> ResultData<T> success(String msg) {
        return new ResultData<T>(SUCCESS_CODE, msg);
    }

    public static <T> ResultData<T> success(String msg, T data) {
        return new ResultData<T>(SUCCESS_CODE, msg, data);
    }

    public static <T> ResultData<T> fail() {
        return new ResultData<T>(FAIL_CODE);
    }

    public static <T> ResultData<T> fail(String msg) {
        return new ResultData<T>(FAIL_CODE, msg);
    }

    public static <T> ResultData<T> fail(T data) {
        return new ResultData<T>(FAIL_CODE, data);
    }

    public static <T> ResultData<T> fail(String msg, T data) {
        return new ResultData<T>(FAIL_CODE, msg, data);
    }

    public static <T> ResultData<T> fail(Integer code, String msg) {
        return new ResultData<T>(code, msg);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值