一、通過@ControllerAdvice和@ExceptionHandler實作處理controller層的異常
package com.prison.common.config;
import com.prison.common.entity.MyException;
import com.prison.common.entity.Result;
import com.prison.common.enums.ResultType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author WangJing
* @Description 異常處理
* @date 2021/6/18 23:48
*/
@Slf4j
@ControllerAdvice
public class MyControllerAdvice {
/**
* 全局異常捕捉處理
* @param ex
* @return
*/
@ResponseBody
@ExceptionHandler(value = Exception.class)
public Result<?> errorHandler(Exception ex) {
log.error("errorHandler:{}", ex.toString());
return new Result(ResultType.FAIL, ex.getMessage());
}
/**
* 攔截捕捉自定義異常 MyException.class
* @param ex
* @return
*/
@ResponseBody
@ExceptionHandler(value = MyException.class)
public Result<?> myErrorHandler(MyException ex) {
log.error("myErrorHandler:{}", ex.toString());
return new Result(ex);
}
}
二、定義自定義異常類
package com.prison.common.entity;
import com.prison.common.enums.ResultType;
import lombok.Data;
/**
* @author WangJing
* @Description 自定義異常
* @date 2021/6/18 0018 23:50
*/
@Data
public class MyException extends RuntimeException {
private Integer code;
private String msg;
public MyException(ResultType resultType) {
code = resultType.getCode();
msg = resultType.getMsg();
}
public MyException(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
}
三、統一傳回類型
package com.prison.common.entity;
import com.prison.common.enums.ResultType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @ClassName Result
* @Description 統一傳回類
* @Author WangJing
* @Date 2021/6/2 21:54 下午
* @Version V1.0
*/
@Data
@ApiModel("接口傳回對象")
public class Result<T> {
@ApiModelProperty("接口響應編碼")
private Integer code;
@ApiModelProperty("接口響應資訊")
private String msg;
@ApiModelProperty("接口響應資料")
private T data;
public Result(ResultType resultType, T data) {
code = resultType.getCode();
msg = resultType.getMsg();
this.data = data;
}
public Result() {
code = ResultType.SUCCESS.getCode();
msg = ResultType.SUCCESS.getMsg();
}
public Result(ResultType resultType) {
code = resultType.getCode();
msg = resultType.getMsg();
}
public Result(MyException ex) {
code = ex.getCode();
msg = ex.getMsg();
}
public Result(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
}
四、統一傳回枚舉類
package com.prison.common.enums;
/**
* @ClassName ResultType
* @Description 傳回枚舉類
* @Author WangJing
* @Date 2021/6/2 22:00 下午
* @Version V1.0
*/
public enum ResultType {
SUCCESS(200,"請求處理成功!"),
FAIL(9001,"請求處理失敗!");
private Integer code;
private String msg;
ResultType(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
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;
}
}
五、自定義異常使用:
throw new MyException(ResultType.FAIL);
注:以上内容僅提供參考和交流,請勿用于商業用途,如有侵權聯系本人删除!