本篇基于@RestControllerAdvice
和@ExceptionHandler
来捕获全局的异常并进行统一的响应
创建自己的自定义业务异常类
public class ServiceException extends Exception{
private String message;
public ServiceException(String message) {
super(message);
this.message = message;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
创建一个通用的响应类
@Data
public class RespDto<T> {
private Integer code;
private String message;
private T data;
public static <T> RespDto<T> success(T data) {
RespDto<T> response = new RespDto<>();
response.setCode(ResponseEnum.SUCCESS.code);
response.setMessage(ResponseEnum.SUCCESS.msg);
response.setData(data);
return response;
}
public static <T> RespDto<T> success() {
RespDto<T> response = new RespDto<>();
response.setCode(ResponseEnum.SUCCESS.code);
response.setMessage(ResponseEnum.SUCCESS.msg);
return response;
}
public static <T> RespDto<T> fail() {
RespDto<T> response = new RespDto<>();
response.setCode(ResponseEnum.FAILED.code);
response.setMessage(ResponseEnum.FAILED.msg);
return response;
}
public static <T> RespDto<T> fail(String msg) {
RespDto<T> response = new RespDto<>();
response.setCode(ResponseEnum.FAILED.code);
response.setMessage(msg);
return response;
}
public static <T> RespDto<T> fail(ResponseEnum responseEnum) {
return new RespDto<>(responseEnum.code, responseEnum.msg);
}
public RespDto() {
}
private RespDto(Integer code, String message) {
this.code = code;
this.message = message;
}
private RespDto(Integer code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
public RespDto(ResponseEnum responseEnum) {
this.code = responseEnum.code;
this.message = responseEnum.msg;
}
}
响应枚举类
public enum ResponseEnum {
SUCCESS(200, "请求成功"),
FAILED(500, "服务异常"),
;
public final int code;
public final String msg;
ResponseEnum(int code, String msg) {
this.code = code;
this.msg = msg;
}
}
本章核心-全局异常捕获
@RestControllerAdvice
public class GlobalException {
@ExceptionHandler(value = {Exception.class})
public RespDto globalExceptionMapping(Exception exception) {
exception.printStackTrace();
return RespDto.fail("服务器错误");
}
@ExceptionHandler(value = {ServiceException.class})
public RespDto serviceExceptionMapping(Exception exception) {
exception.printStackTrace();
return RespDto.fail(exception.getMessage());
}
/**
这里可以定义自己想要捕获的异常,在这里进行处理
@ExceptionHandler(value = {xxxException.class})
public RespDto xxxxExceptionMapping(xxxxException exception) {
exception.printStackTrace();
return RespDto.fail(exception.getMessage());
}
**/
}