SpringBoot之自定义异常处理
2021-06-24 本文已影响0人
久伴我还是酒伴我
简介
SpringBoot项目进行全局异常的处理是非常有必要的,不仅处理异常方便,而且可以优化代码,是针对我们系统中的异常,给予一定规范的处理结果。
自定义异常类
package com.yutian.machine.cat.base.exception;
import com.yutian.machine.cat.enums.SystemStatusEnums;
import lombok.Data;
@Data
public class YTException extends RuntimeException {
/**
* 返回结果代码
*/
private String resultCode = "200";
/**
* 结果描述
*/
private String resultMsg = "调用成功";
/**
* 请求流水号
*/
private String requestNum;
public YTException() {
}
/**
* 初始化异常信息
*
* @param systemStatusEnums
*
* @return
*/
public YTException(SystemStatusEnums systemStatusEnums) {
super(systemStatusEnums.getMessage());
this.resultCode = systemStatusEnums.getCode();
this.resultMsg = systemStatusEnums.getMessage();
}
/**
* 返回 动态结果 code + msg
* @param msg 结果
*/
public YTException(String code, String msg) {
super(msg);
this.resultCode = code;
this.resultMsg = msg;
}
}
自定义返回类
package com.yutian.machine.cat.base.response;
import com.yutian.machine.cat.enums.SystemStatusEnums;
import lombok.Data;
import java.io.Serializable;
/**
* @description: 业务信息结果返回对象
* @author: gaoleijie
* @create: 2020-01-06 17:47
**/
@Data
public class YTBizResponse<T> implements Serializable {
/**
* 结果代码
*/
private String code = SystemStatusEnums.BASE_RESPONSE_SUCCESS.getCode();
/**
* 结果描述
*/
private String msg = SystemStatusEnums.BASE_RESPONSE_SUCCESS.getMessage();
/**
* 结果体
*/
private T data;
public boolean isOk() {
return SystemStatusEnums.BASE_RESPONSE_SUCCESS.getCode().equals(this.code);
}
public static <T> YTBizResponse<T> newInstance(T data) {
YTBizResponse invoiceBaseResponse = new YTBizResponse();
invoiceBaseResponse.setData(data);
return invoiceBaseResponse;
}
/**
* 初始化异常信息
*
* @param code
* @param resultMsg
* @param <T>
* @return
*/
public static <T> YTBizResponse<T> newException(String code, String resultMsg) {
YTBizResponse<T> invoiceBaseResponse = new YTBizResponse();
invoiceBaseResponse.setCode(code);
invoiceBaseResponse.setMsg(resultMsg);
return invoiceBaseResponse;
}
/**
* 初始化异常信息
*
* @param enums
* @param <T>
* @return
*/
public static <T> YTBizResponse<T> newException(SystemStatusEnums enums) {
YTBizResponse<T> invoiceBaseResponse = new YTBizResponse();
invoiceBaseResponse.setCode(enums.getCode());
invoiceBaseResponse.setMsg(enums.getMessage());
return invoiceBaseResponse;
}
}
异常统一处理类
package com.yutian.machine.cat.base.exception;
import com.yutian.machine.cat.base.response.YTBizResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author leijie.gao
* @version 1.0.0
* @ClassName GlobalExceptionHandler.java
* @Description TODO
* @createTime 2021年06月24日 17:27:00
*/
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 自定义异常
* @param e
* @return
*/
@ExceptionHandler(value = YTException.class)
@ResponseBody
public YTBizResponse exceptionHandler(YTException e){
return YTBizResponse.newException(e.getResultCode(),e.getResultMsg());
}
}
结束语
异常统一处理,或许我们看起来实现非常简单,然而,其他它包含的思想却是一种大局思想,这是我们开发人员在开发过程中都应该关注的点,我们并不是只需要关注我们每个人开发的那点任务,而要以一种全局的角度去审视整个项目,这样也能够提升我们开问题的高度。