一、通过@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);
注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!