0
点赞
收藏
分享

微信扫一扫

Java 统一异常处理

快乐小鱼儿_9911 2022-03-22 阅读 99
javaspring

定义统一异常类

public class SysException extends RuntimeException {
public SysException(String msg) {
super(msg);
}

public static SysException init(String...msgs) {
StringBuilder msg = new StringBuilder(16);
for (String m : msgs) {
msg.append(SysConstance.SPACE).append(m);
}
return new SysException(msg.substring(1));
}
}

统一返回类封装

@Data
@Accessors(chain = true)
public class Response<T> {
private int code;
private String msg;
private T data;

/**
* 初始化默认为成功
* */

private Response() {
ResponseCodeEnum success = ResponseCodeEnum.SUCCESS;
this.setCode(success.getCode()).setMsg(success.getDescribe());
}

public static <T> Response<DataList<T>> success(List<T> list, int count) {
Response<DataList<T>> re = new Response<>();
return re.setData(new DataList<T>().setCount(count).setList(list));
}

public static <T> Response<DataList<T>> success(List<T> list) {
int count = 0;
if (list != null && !list.isEmpty()) {
count = list.size();
}
return success(list, count);
}

public static <T> Response<T> success(T data) {
Response<T> r = new Response<>();
return r.setData(data);
}

public static Response<String> success() {
return new Response<>();
}

public static <T> Response<T> fail(String msg) {
Response<T> r = new Response<>();
ResponseCodeEnum fail = ResponseCodeEnum.FAIL;
r.setCode(fail.getCode()).setMsg(fail.getDescribe());
return r.setMsg(msg);
}

public static <T> Response<T> fail() {
Response<T> r = new Response<>();
ResponseCodeEnum fail = ResponseCodeEnum.UN_LOGIN;
return r.setCode(fail.getCode()).setMsg(fail.getDescribe());
}

public static <T> Response<T> error() {
Response<T> r = new Response<>();
ResponseCodeEnum error = ResponseCodeEnum.ERROR;
r.setCode(error.getCode()).setMsg(error.getDescribe());
return r;
}

}

数据封装

@Data
@Accessors(chain = true)
public class DataList<T> {
private Integer count;
private List<T> list;
}

异常处理类

@Slf4j
@Configuration
@Aspect
public class HandleException {
private final String POINT_CUT = "execution(public * com.archives.management.controller..*(..))";
@Pointcut(POINT_CUT)
public void exception() {}

@Around("exception()")
public Object around(ProceedingJoinPoint point) {
Object [] objs = point.getArgs();
try {
if (objs == null || objs.length == 0) {
return point.proceed();
} else {
return point.proceed(objs);
}
} catch (Throwable e) {
if (e instanceof SysException) {
String returnType = getReturnType(point);
if (returnType.equals(SysConstance.RESPONSE)) {
return Response.fail(e.getMessage());
} else if (returnType.equals(SysConstance.STRING)) {
return SysConstance.EXCEPTION_500;
} else {
throw new RuntimeException(SysConstance.RETURN_FORMAT_ERROR);
}
} else {
log.error(e.getMessage(), e);
return SysConstance.EXCEPTION_500;
}
}
}

private String getReturnType(ProceedingJoinPoint point) {
Signature s = point.getSignature();
return s.toLongString().split(SysConstance.SPACE)[1];
}
}
举报

相关推荐

0 条评论